【VBAリファレンス|実務向け】[実務の現場で差がつく!セルにシート名を自動表示させるテクニック]

スポンサーリンク

なぜ「セルにシート名」を表示させる必要があるのか?

実務でExcelを扱っていると、複数のシートにまたがる集計表や、帳票を作成する場面が多々あります。印刷した際に「どのシートのデータかわからなくなる」といったトラブルを防ぐため、ヘッダーやフッターにシート名を配置するのが一般的です。しかし、表計算の入力項目としてシート名を直接参照したい、あるいは帳票内の特定の位置に動的に表示させたいというケースでは、関数による制御が非常に強力な武器になります。今回は、VBAを使わずに標準関数だけでこの課題を解決する方法を解説します。

基礎知識:CELL関数と文字列操作の役割

セルにシート名を表示させるためには、CELL関数という情報関数を使います。この関数は、セルの書式や場所などの情報を取得する際に使用します。
・CELL(“filename”, A1):現在開いているファイルのフルパスとシート名を返します。
しかし、これだけでは「C:\Documents\Book1.xlsx[Sheet1]」といった余計な情報が含まれてしまいます。そこで、FIND関数で「]」の位置を特定し、LEN関数で全体の長さを測り、RIGHT関数で必要な部分だけを切り出すという手順を踏みます。

実装手順:関数を組み立てる

以下の数式を、シート名を表示させたい任意のセルにコピー&ペーストしてください。

=RIGHT(CELL(“filename”,A1),LEN(CELL(“filename”,A1))-FIND(“]”,CELL(“filename”,A1)))

この数式の論理は以下の通りです。
1. CELL関数でフルパスを取得。
2. FIND関数で「]」の文字位置を探す。
3. 全体の文字数から「]」までの文字数を引き、シート名の長さを算出する。
4. RIGHT関数で、その長さ分だけ末尾から文字を抽出する。

サンプルプログラム:VBAで一括設定する(応用編)

実務で何十ものシートに対して手動で設定するのは非効率です。VBAを使えば、全シートのA1セルに一括でこの数式を流し込むことができます。以下のコードを標準モジュールに貼り付けて実行してください。

Sub SetSheetNameInAllSheets()
‘ 全シートのA1セルにシート名を自動表示する数式をセットするマクロ
Dim ws As Worksheet

‘ 画面更新を停止して処理速度を向上
Application.ScreenUpdating = False

For Each ws In ThisWorkbook.Worksheets
‘ A1セルに数式を挿入
ws.Range(“A1”).Formula = “=RIGHT(CELL(“”filename””,A1),LEN(CELL(“”filename””,A1))-FIND(“”]””,CELL(“”filename””,A1)))”

‘ 応用:表示した数式を値に固定したい場合は以下を有効化してください
‘ ws.Range(“A1”).Value = ws.Range(“A1”).Value
Next ws

Application.ScreenUpdating = True
MsgBox “全シートのA1セルにシート名を設定しました!”
End Sub

応用・注意点:現場でのトラブル回避

このテクニックには、実務上知っておくべき重要な注意点が2つあります。

1. 未保存ファイルではエラーになる
CELL(“filename”)はファイルが一度も保存されていない状態ではパスを正しく取得できず、#VALUE!エラーを返します。必ず一度ファイルを保存してから操作を行ってください。

2. シート名を変更した後の更新
シート名を変更した直後は、数式が自動更新されないことがあります。その場合は、[F9]キー(再計算)を押すことで最新のシート名に更新されます。VBAで運用する場合も、シート名変更のイベント(Workbook_SheetActivateなど)をトリガーにして再計算させる仕組みを組み込むと、より堅牢なツールになります。

このテクニックを活用して、メンテナンス性の高い帳票作成を目指しましょう。

タイトルとURLをコピーしました