Excel VBAでシート名一覧表を作成したいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAでフォルダにある複数ブックのシート名を取得し一つの表にまとめたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・Excel VBAでフォルダにある複数ブックのシート名を取得し一つの表にまとめる方法
についてまとめます!
もくじ
Excel VBAでシート名一覧表を作成するイメージ
Excel VBAでシート名一覧表を作成するイメージについて説明をします。
複数のExcelブックに
それぞれ複数のシートを用意します。
次にデータをまとめる先となるExcelブックを用意します。
VBAを実行すると
まず、フォルダにあるブックのリストが収集されます。
次にVBAを実行すると、リストに沿ってブックが開かれ、
データまとめ先のExcelブックのシートへシート名一覧が出力されていきます。
この処理をフォルダにあるExcelブック分繰り返して、完成となります。
データの準備
まずはデータの準備をしましょう。特定シートにデータが入力されている複数のExcelブックを用意し、
フォルダに格納します。
Excel VBAでフォルダにある複数ブックのリストを取得
Excel VBAでフォルダにある複数ブックのリストを取得していきましょう。
まとめ用ブックを用意する
まとめ用ブックを用意します。シート名は「別ブックパス一覧」とします。
また出力先のシートも用意します。シート名は「別ブックシート名一覧表」とします。
VBAコード
VBAコードは以下の通りです。
Sub フォルダ内のファイル名やファイルパスを取得()
Dim intIchi As Integer
Dim strFolderpass As String
Dim objfFSO As Object
Dim objFiles As Object
Dim objFile As Object
'ファイル名一覧を出力する行番号を指定します。
intIchi = 3
'対象フォルダのファイルパスがあるセルを指定し、値を代入します。
strFolderpass = Range("B1").Value
'指定範囲の値をクリアします。
Range("A3:B10000").Clear
'対象フォルダのファイルパスの値があれば処理をおこないます。
If strFolderpass = "" Then
MsgBox "対象フォルダのファイルパスがありません。ファイルパスを入力してください。"
Else
'FileSystemObjectはファイルやフォルダを操作する専用のオブジェクトです。インスタンスにセットします。
Set objfFSO = CreateObject("Scripting.FileSystemObject")
'対象フォルダのファイルオブジェクトをセットします。
Set objFiles = objfFSO.GetFolder(strFolderpass).Files
'ファイル情報を出力します。
For Each objFile In objFiles
Cells(intIchi, 1) = objFile.Name
Cells(intIchi, 2) = objFile.Path
intIchi = intIchi + 1
Next objFile
End If
Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing
End Sub
VBAの設定をする
VBAの設定について説明をします。
ファイル名一覧を出力する行番号を指定します。
今回は3行目指定とします。
intIchi = 3
対象フォルダのファイルパスがあるセルを指定し、値を代入します。
B1セル以外にパスを記載したい場合は変更をしてください。
strFolderpass = Range("B1").Value
指定範囲の値をクリアします。
行数が1万件以上ある場合は変更をしてください。1万件以内であればそのままで結構です。
Range("A3:B10000").Clear
VBAを実装する
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行する
B1セルにブックが格納されているフォルダのパスを記載します。
VBAを実行してみましょう。
「フォルダ内のファイル名やファイルパスを取得」を実行します。
はい!3行目以降にブックのブック名とパスが出力されましたね!
VBAの説明
VBAの内容については以下記事をご参照ください。
Excel VBAでシート名一覧表を作成する
Excel VBAでシート名一覧表を作成していきましょう。
VBAコード
VBAコードは以下の通りです。
Sub 各ブックのシート名一覧をまとめ用ブックへ出力する()
Dim objWorkbook As Workbook
Dim objSheetName As Object
Dim i As Integer
Dim strBookList As Variant
Dim intLastRowNum As Integer
Dim intLastRowNum2 As Integer
Dim strBookPassList As String
Dim strSheetNameList As String
'別ブック一覧があるシート名を指定します。
strBookPassList = "別ブックパス一覧"
'出力先のシート名を指定します。
strSheetNameList = "別ブックシート名一覧表"
With ThisWorkbook
'B列を対象に最終行数を取得します。
intLastRowNum = .Sheets(strBookPassList).Cells(Rows.Count, 2).End(xlUp).Row
'出力先のシートA列を対象に最終行数を取得します。
intLastRowNum2 = .Sheets(strSheetNameList).Cells(Rows.Count, 1).End(xlUp).Row
'別ブック一覧があるシートの3行目からパスを取得します。
For i = 3 To intLastRowNum
'別ブックパスを取得します。
strBookList = .Sheets(strBookPassList).Cells(i, 2).Value
'別ブックを開きます。
Set objWorkbook = Workbooks.Open(strBookList)
'Sheetsコレクションから1シートづつオブジェクトを取得します。
For Each objSheetName In objWorkbook.Sheets
'出力先シートのA列へ対象ブックのパスを出力します。
.Sheets(strSheetNameList).Cells(intLastRowNum2, 1).Value = strBookList
'出力先シートのA列へ対象ブックのシート名を出力します。
.Sheets(strSheetNameList).Cells(intLastRowNum2, 2).Value = objSheetName.Name
intLastRowNum2 = intLastRowNum2 + 1
Next
Next i
End With
'範囲選択を解除します。
Application.CutCopyMode = False
'オブジェクトを解放します。
Set objWorkbook = Nothing
End Sub
VBAの設定をする
VBAの設定について説明をします。
別ブック一覧があるシート名を指定します。
strBookPassList = "別ブックパス一覧"
出力先のシート名を指定します。
strSheetNameList = "別ブックシート名一覧表"
VBAを実行する
VBAを実行してみましょう。
はい!「別ブックシート名一覧表」シートに各ブックのシート名とパスが出力されましたね!
シート名の内容も問題ないですね!
VBAの説明
VBAの内容について説明をします。
B列を対象に最終行数を取得します。
intLastRowNum = .Sheets(strBookPassList).Cells(Rows.Count, 2).End(xlUp).Row
出力先のシートA列を対象に最終行数を取得します。
intLastRowNum2 = .Sheets(strSheetNameList).Cells(Rows.Count, 1).End(xlUp).Row
別ブック一覧があるシートの3行目からパスを取得します。
For i = 3 To intLastRowNum
別ブックパスを取得します。
strBookList = .Sheets(strBookPassList).Cells(i, 2).Value
別ブックを開きます。
Set objWorkbook = Workbooks.Open(strBookList)
Sheetsコレクションから1シートづつオブジェクトを取得します。
For Each objSheetName In objWorkbook.Sheets Next
出力先シートのA列へ対象ブックのパスを出力します。
.Sheets(strSheetNameList).Cells(intLastRowNum2, 1).Value = strBookList
出力先シートのA列へ対象ブックのシート名を出力します。
.Sheets(strSheetNameList).Cells(intLastRowNum2, 2).Value = objSheetName.Name
範囲選択を解除します。
Application.CutCopyMode = False
オブジェクトを解放します。
Set objWorkbook = Nothing
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・Excel VBAでフォルダにある複数ブックのシート名を取得し一つの表にまとめる方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す