串刺し集計をするとき、
- 様式を1つのブックにまとめる
- 集計シートをつくる
- 串刺し集計する
この手順を踏むことになります。
②の処理をするコードを紹介します。
前回の記事のコードは完全一致でシート名を検索しますが、今回はキーワードを含んでいれば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 SubChatGPTさんによる超詳細解説
このコードは、特定のワークブック内に特定のシートが存在するかどうかをチェックし、存在しない場合に新しいシートを追加するためのマクロです。それぞれの部分について説明します。
Function CheckSheetExistsKeyword(wb As Workbook, sheetName As String) As Boolean
- Function CheckSheetExists(wb As Workbook, sheetName As String) As Boolean
- 指定されたワークブック (
wb) 内に特定のシート名 (sheetName) が存在するかどうかをチェックする関数です。戻り値としてBoolean型(真または偽)を返します。
- 指定されたワークブック (
- Dim ws As Worksheet
- ワークシートを参照するための変数
wsを宣言します。
- ワークシートを参照するための変数
- Dim sheetExists As Boolean
- シートが存在するかどうかの結果を格納するための
Boolean型の変数sheetExistsを宣言します。
- シートが存在するかどうかの結果を格納するための
- sheetExists = False
sheetExistsの初期値をFalse(存在しない)に設定します。
- For Each ws In wb.Sheets
- 指定されたワークブックの全てのシートに対してループを実行します。
- If InStr(ws.Name, sheetName) > 0 Then
- 現在のシートの名前が引数で指定された
sheetNameを含んでいるかどうかを確認します。
- 現在のシートの名前が引数で指定された
- sheetExists = True
- シート名が一致する場合、
sheetExistsをTrueに設定します。
- シート名が一致する場合、
- Exit For
- 一致するシートが見つかった場合、ループを直ちに終了します。
- Next ws
- 次のシートに進みます。
- CheckSheetExistsKeyword = sheetExists
CheckSheetExistsKeyword関数の戻り値をsheetExistsの値に設定します。
Function SelectExcelFile() As String
この関数はファイル選択ダイアログを表示し、選択されたファイルのパスを返します。ユーザーがキャンセルした場合は処理を終了します。
Sub Test()
- Dim wb As Workbook
- ワークブックを参照するための変数
wbを宣言します。
- ワークブックを参照するための変数
- Dim filePath As String
- ファイルパスを格納するための変数
filePathを宣言します。
- ファイルパスを格納するための変数
- filePath = SelectExcelFile()
SelectExcelFile関数を呼び出して、選択されたExcelファイルのパスをfilePathに格納します。
- Set wb = Workbooks.Open(filePath)
filePathで指定されたExcelファイルを開き、その参照をwbに設定します。
- If CheckSheetExists(wb, “集計”) Then
CheckSheetExists関数を使用して、ワークブックwb内に “集計” という名前のシートが存在するかどうかをチェックします。
- MsgBox “集計シートあり”
- シートが存在する場合は、メッセージボックスを表示してユーザーに通知します。
- Else
- シートが存在しない場合の処理です。
- Worksheets.Add before:=Worksheets(1)
- 新しいワークシートを追加し、最初の位置に配置します。
- ActiveSheet.Name = “集計”
- 新しく追加されたシートの名前を “集計” に設定します











コメントを残す