Excelの情報整理を始める前に、シート名を一覧化する
Excelに蓄積された情報を整理するとき、すぐに統合や加工を始めるとは限りません。
複数のシートを含むブックでは、まず、そのファイルにどのようなシートが含まれているかを把握する必要があります。
シート数が少なければ目視でも確認できますが、シートが増えると、全体構成を確認するだけでも時間がかかります。
そこで、指定したExcelファイルに含まれるワークシート名を、VBAで一覧化するマクロを作成しました。
情報整理の最初に、構造を確認する
Excelブック内の情報を再利用しやすい形へ整理する場合、最初に確認したいのは、データの内容だけではありません。
次のような構造も確認する必要があります。
- いくつのシートが含まれているか
- どのような名前で分類されているか
- 統合対象になりそうなシートはどれか
- 確認対象外のシートが含まれていないか
- 同じような名称のシートが重複していないか
シート名は、Excelブック内の分類や構成を表していることがあります。
そのため、一覧化しておくだけでも、その後の整理方法を検討しやすくなります。
今回作成したマクロ
今回のマクロでは、ファイル選択ダイアログからExcelファイルを指定し、そのファイルに含まれるワークシート名を一覧として取得します。
一覧は、マクロを保存しているブック内のシート名一覧シートへ出力します。
出力される項目は、次の2つです。
| 項目 | 内容 |
|---|---|
| シート番号 | 対象ブック内でのシートの順番 |
| シート名 | ワークシートの名称 |
出力イメージ
一覧は、次のような形式で作成されます。
| シート番号 | シート名 |
|---|---|
| 1 | Summary |
| 2 | Data_01 |
| 3 | Data_02 |
| 4 | Checklist |
実際の業務ファイルではなく、記事内では一般化したシート名を使用しています。
VBAコード
Option Explicit
Sub ExtractSheetNamesFromSelectedFile()
Dim wbTarget As Workbook
Dim wsOutput As Worksheet
Dim wbSheet As Worksheet
Dim targetPath As Variant
Dim i As Long
On Error GoTo ErrorHandler
' ファイル選択ダイアログを表示する
targetPath = Application.GetOpenFilename( _
FileFilter:="Excel Files (*.xls; *.xlsx; *.xlsm; *.xlsb), *.xls; *.xlsx; *.xlsm; *.xlsb", _
Title:="シート名を取得するExcelファイルを選択してください" _
)
' キャンセルされた場合は処理を終了する
If targetPath = False Then
Exit Sub
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' 既存の「シート名一覧」シートがある場合は削除する
On Error Resume Next
ThisWorkbook.Worksheets("シート名一覧").Delete
On Error GoTo ErrorHandler
Application.DisplayAlerts = True
' 出力用シートを作成する
Set wsOutput = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) _
)
wsOutput.Name = "シート名一覧"
' 見出しを設定する
wsOutput.Cells(1, 1).Value = "シート番号"
wsOutput.Cells(1, 2).Value = "シート名"
' 対象ファイルを読み取り専用で開く
Set wbTarget = Workbooks.Open( _
Filename:=CStr(targetPath), _
ReadOnly:=True, _
UpdateLinks:=False _
)
' 対象ブックのワークシート名を一覧へ出力する
i = 2
For Each wbSheet In wbTarget.Worksheets
wsOutput.Cells(i, 1).Value = i - 1
wsOutput.Cells(i, 2).Value = wbSheet.Name
i = i + 1
Next wbSheet
' 対象ブックを保存せずに閉じる
wbTarget.Close SaveChanges:=False
Set wbTarget = Nothing
' 表示を整える
With wsOutput
.Rows(1).Font.Bold = True
.Columns("A:B").AutoFit
.Range("A1:B" & i - 1).Borders.LineStyle = xlContinuous
.Activate
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "指定したファイルからシート名を取得しました。", vbInformation
Exit Sub
ErrorHandler:
' 対象ブックが開いている場合は保存せずに閉じる
If Not wbTarget Is Nothing Then
wbTarget.Close SaveChanges:=False
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox _
"処理中にエラーが発生しました。" & vbCrLf & _
"エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, _
vbExclamation
End Sub
マクロの動作
このマクロを実行すると、次の順序で処理されます。
- シート名を取得したいExcelファイルを選択する
- 対象ファイルを読み取り専用で開く
- 対象ファイルのワークシート名を取得する
- マクロを保存しているブックへ一覧を作成する
- 対象ファイルを保存せずに閉じる
元のExcelファイルへシートを追加したり、内容を書き換えたりする処理は行いません。
なぜ読み取り専用で開くのか
今回は、対象ファイルの内容を変更する必要がありません。
必要なのは、ワークシート名の取得だけです。
そのため、対象ファイルは次のように読み取り専用で開いています。
Set wbTarget = Workbooks.Open( _
Filename:=CStr(targetPath), _
ReadOnly:=True, _
UpdateLinks:=False _
)
ReadOnly:=Trueを指定することで、対象ファイルを編集せずに開きます。
また、UpdateLinks:=Falseを指定し、外部リンクの更新を行わないようにしています。
SheetsではなくWorksheetsを使用する理由
Excel VBAでは、SheetsとWorksheetsは似ていますが、対象範囲が異なります。
Sheetsには、通常のワークシート以外に、グラフシートなどが含まれる場合があります。
今回は、表形式の情報が入力されるワークシート名を取得することが目的です。
そのため、次のようにWorksheetsを使用しています。
For Each wbSheet In wbTarget.Worksheets
一覧化した後に考えられること
シート名を一覧化すると、次のような確認へ進みやすくなります。
- 同じ形式のシートが複数あるか
- シート名に一定の命名規則があるか
- 古いシートや重複シートが含まれていないか
- 統合対象となるシートはどれか
- チェックリスト化やデータベース化が可能か
シート名の一覧そのものが最終成果ではありません。
一覧化は、Excel内の情報構造を把握し、その後の整理方法を考えるための準備です。
Excelブックを確認する
↓
シート構成を一覧化する
↓
対象となる情報の範囲を把握する
↓
統合・分類・比較の方法を決める
↓
再利用しやすい形へ整理する
情報を再利用しやすくするために
調査結果や業務上の情報は、保存されているだけでは、必ずしも再利用しやすい状態とはいえません。
Excel、表、チェックリスト、ナレッジベースなどへ展開する場合、最初に必要なのは、対象となる情報の構造を確認することです。
今回のシート名一覧化は、そのための小さな処理の一つです。
情報整理では、いきなり複雑な処理を始めるのではなく、次のように段階を分けることが重要です。
- 対象を確認する
- 構造を把握する
- 不要な情報を除外する
- 必要な単位へ整理する
- 再利用できる形式へ変換する
利用時の注意点
このマクロを使用する際は、次の点に注意してください。
シート名一覧シートは再作成される
マクロを再実行すると、マクロを保存しているブック内のシート名一覧シートは削除され、新しい一覧へ置き換えられます。
手作業で追記した内容がある場合、その内容も削除されます。
非表示シートも一覧に含まれる
Worksheetsには、表示中のシートだけでなく、非表示のワークシートも含まれます。
表示中のシートだけを取得したい場合は、別途条件を追加する必要があります。
ブック構造の保護に注意する
マクロを保存しているブックの構造が保護されている場合、シートの追加や削除ができず、エラーになることがあります。
実際の業務ファイルは公開しない
業務で使用しているExcelファイルには、顧客名、製品名、調査分類、案件名などが含まれている場合があります。
外部公開用の記事では、実際のシート名や画面は使用せず、一般化したサンプルを使用する方が安全です。
まとめ
今回は、指定したExcelファイルに含まれるワークシート名を、VBAで一覧化する方法を紹介しました。
シート名を一覧にするだけのシンプルなマクロですが、複数シートを含むExcelブックの構造を把握するために役立ちます。
調査結果や業務上の情報を再利用しやすい形へ整理するには、最初に対象範囲と情報構造を把握することが重要です。
小さな確認作業を自動化することで、その後の統合、分類、比較、チェックリスト化などへ進みやすくなります。