Excel で表紙シートや帳票のセルに、現在のシート名を自動で表示したいことがあります。シートを増やしたり名前を変えたりするたびに、手で書き直すのは大変です。
この記事では、シート名をセルに表示する 2 通りの式を解説します。最新の Excel 2024 / Microsoft 365 で使える TEXTAFTER 関数の短縮式と、Excel 2019 / 2021 でも動く MID 関数の基本式の 2 つです。未保存ブックの罠と第 2 引数の落とし穴まで Excel 2024 実機で確認しています。
この記事は Windows / Mac のデスクトップ版 Excel を対象にしています。Excel for the web と Excel Mobile では、本記事で使う CELL("filename") の "filename" 情報自体がサポートされていないため、同じ式は動きません。
結論|コピペで使える 2 つの計算式
Excel でシート名をセルに表示する数式は、以下の 2 通りがあります。お使いのバージョンに合わせて選んでください。
最新版(Excel 2024 / Microsoft 365)の短縮式
=TEXTAFTER(CELL("filename",A1), "]")セル A1 が存在するシート(その式を入れたシート自体)の名前が返ります。
従来版(Excel 2019 / 2021 でも動く)の基本式
=MID(CELL("filename",A1), FIND("]",CELL("filename",A1))+1, 255)結果は同じです。TEXTAFTER 関数が使えない古いバージョンの Excel ではこちらを使ってください。
3 つの注意点
- ブックを一度は保存してから使う(未保存だと
CELL("filename",A1)が空文字列を返し、その後のTEXTAFTERは#N/A、MIDは#VALUE!エラーになります) - 第 2 引数の
A1を省略しない(省略すると、再計算のタイミングで「そのとき選択されているセルのシート名」に変わってしまうことがあるためです) - 1 つのブックに大量に配置しすぎない(
CELL関数は揮発関数で、再計算負荷が増えるためです)
それぞれの理由は、このあとの見出しで詳しく説明します。
それぞれの式がどう動くか
=CELL("filename",A1) は、ブックを保存している場合、次のような長い文字列を返します。
C:\Users\アカウント名\Documents\[Book1.xlsx]Sheet1
この文字列は、フルパス(フォルダーの場所)、[ ] で囲まれたブック名、そしてシート名が続く形式です。
シート名だけを取り出すには、] の右側の文字を抽出します。Excel 2024 では TEXTAFTER 関数で「区切り文字の後ろ」を一発で取れます。
古い Excel では同じことを「FIND で ] の位置を見つけて、MID でそこから 255 文字取り出す」という形で実現します。シート名は最大 31 文字なので、第 3 引数は 255 で足ります。
| 関数 | 役割 |
|---|---|
CELL("filename",A1) | ブック保存場所、角かっこで囲まれたブック名、シート名 を 1 つの文字列で返す |
FIND("]",…) | ] が文字列の何文字目にあるかを返す |
MID(…,開始,長さ) | 文字列の途中から指定文字数を抜き出す |
TEXTAFTER(…,区切り) | 区切り文字の後ろの部分をそのまま返す(Microsoft 365 / Excel 2024 / Excel for the web / Excel for Microsoft 365 for Mac / Excel 2024 for Mac 専用) |
第 2 引数を省略してはいけない理由
シート名取得の解説では、ときどき第 2 引数を省略した次のような式を見かけます。
=TEXTAFTER(CELL("filename"), "]")動くことは動きますが、第 2 引数を省略すると、再計算のタイミングで「そのとき選択されていたセルのシート名」が返ります。 シートを切り替えただけで直ちに変わるわけではありませんが、ほかのセルを編集して再計算が走ったり、F9 を押したりすると、別シートの名前に置き換わってしまいます。
たとえば「売上」シートにこの式を入れて売上シートを表示しているときは「売上」が表示されますが、その状態で別の「Sheet1」を表示し、何かを入力して再計算が起きると、売上シートの式まで結果が「Sheet1」に変わってしまいます。
Microsoft 公式ドキュメント(CELL 関数)でも、参照を省略すると「計算時に選択されているセル」の情報が返り、結果は安定しないため第 2 引数の省略は推奨しないと明記されています。
帳票や表紙のシートで「いまそこにあるシート名を確実に出したい」場合は、必ず同じシートのセル(A1 など)を第 2 引数に渡すことで、再計算のタイミングに左右されずシートごとに固定された結果が得られます。
逆に、別のシートの名前を別の場所に出したい場合は、次のように 'シート名'!A1 の形で参照します。
=TEXTAFTER(CELL("filename",'売上'!A1), "]")この式はどのシートに置いても、どのタイミングで再計算しても、安定して「売上」を返します。
動かない・空になるときの確認点
式を入れたのに期待どおりの結果が出ない場合は、次の 4 点を確認してください。
原因 1:ブックを一度も保存していない
新規作成したばかりで一度も保存していないブックでは、CELL("filename",A1) が空文字列を返します。その結果、次のエラーが出ます。
- TEXTAFTER 短縮版は
#N/Aエラーになります(区切り文字]が見つからないため) - MID 基本式は
#VALUE!エラーになります(FINDが]を見つけられず#VALUE!を返すため)
対処は単純で、一度ブックに名前を付けて保存すれば解消します。エラー表示を出したくない場合は、次の見出し「未保存でもエラーを出したくないとき」のラップ式を使ってください。
原因 2:第 2 引数を省略している
「再計算依存の罠」です。先に説明したとおり、第 2 引数を必ず A1 などのセル参照で明示してください。
原因 3:シート名を変えたあと値が変わらない
Excel は標準(自動計算モード)の場合、シート名を変更するとすぐに再計算が走り、式の結果も自動で更新されます。F9 を押す必要はありません。
もし結果が古いままなら、計算モードが「手動」になっている可能性があります。リボンの計算方法の設定が「手動」になっていたら、F9 を押すか、「自動」に戻してください(リボン上の正確な場所は Excel のバージョンや表示状態で異なります)。
原因 4:Excel 2019 / 2021 で #NAME? エラーになる
TEXTAFTER 関数の対応バージョンは、Microsoft 365、Excel 2024、Excel for the web、Excel for Microsoft 365 for Mac、Excel 2024 for Mac です。Excel 2019 / 2021 で #NAME? エラーが出る場合は、上で示した MID 基本式に切り替えてください。従来版の詳細はこちら。
未保存でもエラーを出したくないとき
テンプレートブックなどで、保存前に開いた瞬間からきれいに表示したい場合は、ラップ関数で代替テキストを返します。
TEXTAFTER 短縮版を IFNA でラップ
=IFNA(TEXTAFTER(CELL("filename",A1),"]"), "(未保存)")MID 基本式を IFERROR でラップ
=IFERROR(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255), "(未保存)")ポイントは、TEXTAFTER の方は #N/A エラーなので IFNA、MID の方は #VALUE! エラーなので IFERROR を使うことです。IFNA は #N/A 専用の捕捉関数で、#VALUE! は捕捉できません。逆に IFERROR はあらゆるエラーを拾います。
保存済みのブックでは普通にシート名が表示され、未保存のときだけ「(未保存)」が出るので、表紙シートを途中まで作っている段階でも見た目が崩れません。
ブック名・パス・別ブックも取り出したいとき
シート名と一緒にブック名やフォルダーパスも表示したいことがあります。CELL("filename",A1) の戻り値からそれぞれ抜き出せます。
ブック名(拡張子つき)を取り出す
Excel 2024 / Microsoft 365 では TEXTBEFORE と TEXTAFTER を組み合わせる短縮式が使えます。
=TEXTBEFORE(TEXTAFTER(CELL("filename",A1),"["),"]")従来版なら次のように MID と FIND で [ と ] の間を取り出します。
=MID(CELL("filename",A1),FIND("[",CELL("filename",A1))+1,FIND("]",CELL("filename",A1))-FIND("[",CELL("filename",A1))-1)フォルダーパス(ブックが置かれている場所)を取り出す
=TEXTBEFORE(CELL("filename",A1),"[")末尾に \ が付いた状態でパスが返ります(例: C:\Users\アカウント名\Documents\)。
別のブックのシート名を取り出す
同じ Excel セッション内で別のブックが開いているなら、ブック名とシート名を直接指定できます。
=TEXTAFTER(CELL("filename",'[OtherBook.xlsx]別ブックシート'!A1),"]")この式は 「参照先のブックが現在の Excel に開いている間だけ」有効です。参照先ブックを閉じたあと再計算すると、#N/A エラーになります。閉じた状態のブックのシート名を常時表示したい用途には向きません。表紙シートで自分のブックのシート名を出すだけなら、別ブック参照は不要です。
使うときの注意(性能とシート名の制限)
CELL は揮発関数 — 大量配置に注意
CELL 関数は、引数によっては揮発関数と呼ばれる扱いになります(Microsoft Learn: Excel の再計算)。揮発関数は、再計算のたびに毎回評価し直されます。シートに 1〜2 個ならほぼ問題になりません。表の行ごとに大量に並べると再計算速度が落ちる場合もあるので、必要な場所だけに配置してください。
シート名は最大 31 文字、使えない文字もある
Excel のシート名は 最大 31 文字です。MID 基本式の第 3 引数を 255 にしているのは余裕を持たせるためで、31 文字を超えるシート名は Excel 自体が拒否するため、切り捨てが起きることはありません。 詳しい制約は Excelのワークシート名に使用できない名前や記号について も参照してください。
さらに、シート名には次の文字や形式が使えません。これらを入れようとすると Excel がエラーで拒否します(代表例)。
- コロン
: - 円記号
\ - スラッシュ
/ - 疑問符
? - アスタリスク
* - 左角かっこ
[ - 右角かっこ
] - シート名の先頭または末尾にアポストロフィ
' - 空白だけの名前
使えない記号・名前のさらに詳しいルールは Excelのワークシート名に使用できない名前や記号について にまとめてあります。とくに、CELL の戻り値に含まれる [ と ] はファイル名やフォルダーパスにも使えないため(Excel 自体が [ / ] を含むパスへの保存を拒否します)、ブック名を区切る記号として安全に使えます。
保護シート・読み取り専用ブックでも動く
シートに保護をかけても、=TEXTAFTER(CELL("filename",A1),"]") の評価は止まりません。読み取り専用属性で開いたブックでも同じく動作します。
ただし、共同編集(Co-authoring)中の挙動は Microsoft の公式ドキュメントでも注意が示されています。本記事では共同編集中の挙動までは検証していないため、共同編集中の表紙シートで使う場合は、第 2 引数を A1 など同一シートのセルに固定したうえで、結果が安定するか自分の環境で確認してください。
まとめ
Excel でシート名をセルに自動表示するには、次の式が最短です。
=TEXTAFTER(CELL("filename",A1), "]")Excel 2019 / 2021 など TEXTAFTER が使えないバージョンでは、次の MID 基本式に切り替えてください。
=MID(CELL("filename",A1), FIND("]",CELL("filename",A1))+1, 255)第 2 引数の A1 を省略しない、保存済みブックで使う、揮発関数なので大量配置しない、の 3 点を押さえると、基本的なトラブルは避けやすくなります。
同じく Excel のブック内シート名を扱う関連記事として、従来式の詳細解説(post 14645)、左から N 番目のシート名を取得する UDF、ワークシート名を取得する計算式・関数も用意しています。シート名を使ったハイパーリンクなら セルに入力されたシート名文字列を用いてハイパーリンクを作成する計算式もご参照ください。






コメント