部品_シート存在チェック
SheetExists
https://feelcodelab.com/vba_parts/sheetexists/
・指定したブックに、指定した名前のワークシートが存在するかを判定する ・存在する場合は True、存在しない場合は False を返す ・シートを操作する前の存在確認(エラー防止)に使用する ★ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、Boolean を返す
土台
確認
シート
★【最重要】この部品は Function(関数)であり、戻り値(Boolean)を返す
→ 呼び出し側は、戻り値を受け取って、存在の有無を判定する
★【最重要】調べるブック(vWb)は、必ず引数で指定する(省略できない)
→ ThisWorkbook = このマクロが入っているブック / ActiveWorkbook = いまアクティブなブック
→ ファイルを開く部品の後は、ActiveWorkbook が、開いたファイルに切り替わる。
開いた直後に、ActiveWorkbook を変数へ控えて、その変数を渡す
・ブックに何も設定していない変数(Nothing)を渡すと、エラーで止まる(vbObjectError + 1010)
・確認対象はワークシートのみ(グラフシートは存在していても False を返す)
・シート名の大文字・小文字は区別されない
・シート名が空白・不正な場合は False を返す(エラーにはならない)
・Offset / Find / Resize / With は禁止・なし(土台の部品。他の部品を参照しない。単独で使用可能) ・シート名変更(RenameSheet)などのシート操作系の部品の「前」に呼び出して、 重複・不存在を事前に確認する使い方が多い
・特になし(マッピング表等は不要)
vWb : 調べるブック(Workbook)※必須(省略できない) vSheetName : 存在を確認したいシートのシート名(String)
Boolean : 指定したブックにシートが存在する場合は True、存在しない場合は False
Boolean
Function 部品_シート存在チェック( _
ByVal vWb As Workbook, _
ByVal vSheetName As String) As Boolean
部品_シート存在チェック = f_SheetExists(vWb, vSheetName)
End Function
Function f_SheetExists( _
ByVal vWb As Workbook, _
ByVal vSheetName As String) As Boolean
Dim ws As Worksheet
f_SheetExists = False
If vWb Is Nothing Then
Err.Raise vbObjectError + 1010, "f_SheetExists", _
"調べるブック(vWb)が設定されていません(Nothing)。"
End If
On Error GoTo ErrHandler
Set ws = vWb.Worksheets(vSheetName)
f_SheetExists = True
Exit Function
ErrHandler:
f_SheetExists = False
End Function<例1:マクロのファイル(ThisWorkbook)を調べる>
If 部品_シート存在チェック(ThisWorkbook, "入力") Then
ThisWorkbook.Worksheets("入力").Activate
Else
MsgBox "シート「入力」が存在しません"
End If
<例2:開いたファイルを調べる>
Dim wbDst As Workbook
If 部品_ファイルを開く("E:\TEST\テンプレート.xlsx") = False Then Exit Sub
Set wbDst = ActiveWorkbook '開いた直後に控える
If 部品_シート存在チェック(wbDst, "帳票") = False Then
MsgBox "テンプレートにシート「帳票」がありません"
End If
<例3:シート名変更の前に、重複を確認する>
If 部品_シート存在チェック(ThisWorkbook, "TEMP") = False Then
MsgBox "シート「TEMP」が存在しません"
ElseIf 部品_シート存在チェック(ThisWorkbook, "入力_2026") Then
MsgBox "「入力_2026」は既に存在します"
Else
isRenamed = 部品_シート名変更(ThisWorkbook.Worksheets("TEMP"), "入力_2026")
End If 1.1
2026-11-02