【VBA】エクセルブックのシート名に特定のキーワードを含むシートがあるかどうかを判定し、ない場合は追加する

串刺し集計をするとき、

  1. 様式を1つのブックにまとめる
  2. 集計シートをつくる
  3. 串刺し集計する

この手順を踏むことになります。

②の処理をするコードを紹介します。

前回の記事のコードは完全一致でシート名を検索しますが、今回はキーワードを含んでいればOKです。

例えば、シート名に「集計」を含むシートがなければシートを追加したい場合、「集計1」というシートがあれば追加されません。

Function CheckSheetExistsKeyword(wb As Workbook, sheetName As String) As Boolean
'指定したキーワードを含むシートが存在するかどうかを判定する

    Dim ws As Worksheet
    Dim sheetExists As Boolean

    '初期値をFalseに設定
    sheetExists = False

    For Each ws In wb.Sheets
        If InStr(ws.Name, sheetName) > 0 Then
            sheetExists = True
            Exit For
        End If
    Next ws

    If sheetExists Then
        CheckSheetExistsKeyword = True
    Else
        CheckSheetExistsKeyword = False
    End If

End Function

Function SelectExcelFile() As String
    Dim filePath As String
    
    ' ファイルの選択ダイアログを表示し、ファイルパスを取得
    filePath = Application.GetOpenFilename("Excelファイル (*.xls; *.xlsx), *.xls; *.xlsx")
    
    ' ダイアログがキャンセルされた場合は処理を終了
    If filePath = "False" Then
        Exit Function
    Else
        SelectExcelFile = filePath
    End If

End Function

Sub Test()

    Dim wb As Workbook
    Dim filePath As String

    ' ファイルを選択
    filePath = SelectExcelFile()

    Set wb = Workbooks.Open(filePath)

    ' シート名に「集計」を含むシートがあるかどうかを判定
    If CheckSheetExistsKeyword(wb, "集計") Then
        MsgBox "集計シートあり"
    Else
        MsgBox "集計シートがないので追加します。"
        Worksheets.Add before:=Worksheets(1)
        ActiveSheet.Name = "集計"
    End If
    
End Sub

ChatGPTさんによる超詳細解説

このコードは、特定のワークブック内に特定のシートが存在するかどうかをチェックし、存在しない場合に新しいシートを追加するためのマクロです。それぞれの部分について説明します。

Function CheckSheetExistsKeyword(wb As Workbook, sheetName As String) As Boolean

  1. Function CheckSheetExists(wb As Workbook, sheetName As String) As Boolean
    • 指定されたワークブック (wb) 内に特定のシート名 (sheetName) が存在するかどうかをチェックする関数です。戻り値として Boolean 型(真または偽)を返します。
  2. Dim ws As Worksheet
    • ワークシートを参照するための変数 ws を宣言します。
  3. Dim sheetExists As Boolean
    • シートが存在するかどうかの結果を格納するための Boolean 型の変数 sheetExists を宣言します。
  4. sheetExists = False
    • sheetExists の初期値を False(存在しない)に設定します。
  5. For Each ws In wb.Sheets
    • 指定されたワークブックの全てのシートに対してループを実行します。
  6. If InStr(ws.Name, sheetName) > 0 Then
    • 現在のシートの名前が引数で指定された sheetNameを含んでいるかどうかを確認します。
  7. sheetExists = True
    • シート名が一致する場合、sheetExists を True に設定します。
  8. Exit For
    • 一致するシートが見つかった場合、ループを直ちに終了します。
  9. Next ws
    • 次のシートに進みます。
  10. CheckSheetExistsKeyword = sheetExists
    • CheckSheetExistsKeyword 関数の戻り値を sheetExists の値に設定します。

Function SelectExcelFile() As String

この関数はファイル選択ダイアログを表示し、選択されたファイルのパスを返します。ユーザーがキャンセルした場合は処理を終了します。

Sub Test()

  1. Dim wb As Workbook
    • ワークブックを参照するための変数 wb を宣言します。
  2. Dim filePath As String
    • ファイルパスを格納するための変数 filePath を宣言します。
  3. filePath = SelectExcelFile()
    • SelectExcelFile 関数を呼び出して、選択されたExcelファイルのパスを filePath に格納します。
  4. Set wb = Workbooks.Open(filePath)
    • filePath で指定されたExcelファイルを開き、その参照を wb に設定します。
  5. If CheckSheetExists(wb, “集計”) Then
    • CheckSheetExists 関数を使用して、ワークブック wb 内に “集計” という名前のシートが存在するかどうかをチェックします。
  6. MsgBox “集計シートあり”
    • シートが存在する場合は、メッセージボックスを表示してユーザーに通知します。
  7. Else
    • シートが存在しない場合の処理です。
  8. Worksheets.Add before:=Worksheets(1)
    • 新しいワークシートを追加し、最初の位置に配置します。
  9. ActiveSheet.Name = “集計”
    • 新しく追加されたシートの名前を “集計” に設定します

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA