串刺し集計をするとき、
- 様式を1つのブックにまとめる
- 集計シートをつくる
- 串刺し集計する
この手順を踏むことになります。
②の処理をするコードを紹介します。
Function CheckSheetExists(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 ws.Name = sheetName Then
sheetExists = True
Exit For
End If
Next ws
If sheetExists Then
CheckSheetExists = True
Else
CheckSheetExists = 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 CheckSheetExists(wb, "集計") Then
MsgBox "集計シートあり"
Else
MsgBox "集計シートがないので追加します。"
Worksheets.Add before:=Worksheets(1)
ActiveSheet.Name = "集計"
End If
End SubCheckSheetExists()はブックと文字列を引数にとり、ブック内のシート内に引数の文字列と一致するシートがある場合はTrueを返します。
完全一致ではなく、「特定の文字列を含む」とする場合はこちらの記事を参照してください。
記事リンク
このマクロは本当に必要なのか
現実には集計シートがなければ自分で追加する方が早いです。
- 様式を1つのブックにまとめる
- 集計シートをつくる
- 串刺し集計する
①と③は別々にマクロを組んで②は自分でやるというのが実践的に最速だと思います。
①~③を1つのマクロにまとめて連続処理にしても処理時間はそう変わらないでしょう。
①と③を汎用性の高いものに仕上げた場合や、串刺し集計を何十件もする必要がある場合はこのコードは有用なものとなります。
ChatGPTさんによる超詳細解説
このコードは、特定のワークブック内に特定のシートが存在するかどうかをチェックし、存在しない場合に新しいシートを追加するためのマクロです。それぞれの部分について説明します。
Function CheckSheetExists(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 ws.Name = sheetName Then
- 現在のシートの名前が引数で指定された
sheetNameと一致するかどうかを確認します。
- 現在のシートの名前が引数で指定された
- sheetExists = True
- シート名が一致する場合、
sheetExistsをTrueに設定します。
- シート名が一致する場合、
- Exit For
- 一致するシートが見つかった場合、ループを直ちに終了します。
- Next ws
- 次のシートに進みます。
- CheckSheetExists = sheetExists
CheckSheetExists関数の戻り値を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 = “集計”
- 新しく追加されたシートの名前を “集計” に設定します










コメントを残す