「シート名 取得 一覧 複数 ファイル」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
複数のファイル・ブックのシート名一覧を作成する方法を探している方による検索です。
この検索だけでは、どのような要望なのかが特定できませんが、参考になりそうなVBA(Visual Basic for Applications)マクロをご紹介しておきます。
開いているすべてのブックの、シート一覧を作成するマクロです。
Sub 開いている全ブックのシート名一覧を作成する()
Dim bk As Workbook
Dim sh As Object
Dim row_num As Long
'シート枚数を1枚に設定して新規ブックを作成
Application.SheetsInNewWorkbook = 1
Workbooks.Add
'見出し行の作成
Range("A1").Value = "ブック名"
Range("B1").Value = "シート名"
Range("A1:B1").HorizontalAlignment = xlCenter
'ブック名・シート名の出力を開始する行番号を変数に格納
row_num = 2
For Each bk In Workbooks
'ブックが、一覧を作成しているブックではないときに処理実行
If bk.Name <> ActiveWorkbook.Name Then
'ブック名の書き出し
Cells(row_num, 1) = bk.Name
'シート名の書き出し
For Each sh In bk.Sheets
Cells(row_num, 2) = "'" & sh.Name
'行番号のインクリメント
row_num = row_num + 1
Next sh
End If
Next bk
'ブック名・シート名を書き出した列幅を自動調整
Range("A:B").EntireColumn.AutoFit
上記のマクロを実行すると、シートが1枚の新規のブックが作成され、そのA列にブック名、B列にシート名が書き出されます。
すべてのブックに対するループ処理の中で、
For Each bk In Workbooks
すべてのシートに対するループ処理を行っています。
For Each sh In bk.Sheets
シート名が「001」のような場合に
Cells(row_num, 2) = sh.Name
のような書き出しをするとセル上では「1」に変更されてしまうので、それを避けるためにシート名の前に「'」(シングルクォート)をつけて出力しています。
Cells(row_num, 2) = "'" & sh.Name
ブック名は1回しか書き出さないようにしていますが、すべてのシート名の隣にブック名も出力したいのなら
For Each sh In bk.Sheets
Cells(row_num, 1) = bk.Name
Cells(row_num, 2) = "'" & sh.Name
のようにブック名を書き出す処理を、内側のループの中に入れてください。
- Newer:目標が明確に設定されているのがよかった
- Older:Windows 8で送る・SendToフォルダーは?
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 開いている全ブックのシート名一覧を作成するマクロ