Article

Excelでシート名をセルに表示|TEXTAFTER/MID式

この記事で分かること

Excelでシート名をセルに自動表示するTEXTAFTER短縮式とMID基本式を、第2引数の罠と未保存ブックの#N/A対処まで実機検証つきで解説します。

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 が存在するシート(その式を入れたシート自体)の名前が返ります。

D1 セルに TEXTAFTER と CELL の式を入力し、シート名「4週目」が表示された画面

従来版(Excel 2019 / 2021 でも動く)の基本式

=MID(CELL("filename",A1), FIND("]",CELL("filename",A1))+1, 255)

結果は同じです。TEXTAFTER 関数が使えない古いバージョンの Excel ではこちらを使ってください。

3 つの注意点

  • ブックを一度は保存してから使う(未保存だと CELL("filename",A1) が空文字列を返し、その後の TEXTAFTER#N/AMID#VALUE! エラーになります)
  • 第 2 引数の A1 を省略しない(省略すると、再計算のタイミングで「そのとき選択されているセルのシート名」に変わってしまうことがあるためです)
  • 1 つのブックに大量に配置しすぎないCELL 関数は揮発関数で、再計算負荷が増えるためです)

それぞれの理由は、このあとの見出しで詳しく説明します。

それぞれの式がどう動くか

=CELL("filename",A1) は、ブックを保存している場合、次のような長い文字列を返します。

C:\Users\アカウント名\Documents\[Book1.xlsx]Sheet1

この文字列は、フルパス(フォルダーの場所)、[ ] で囲まれたブック名、そしてシート名が続く形式です。

CELL関数の戻り値の例 - フルパス+ブック名+シート名がセルに表示されている画面

シート名だけを取り出すには、] の右側の文字を抽出します。Excel 2024 では TEXTAFTER 関数で「区切り文字の後ろ」を一発で取れます。

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」に変わってしまいます。

売上シートで第2引数省略の式が売上を返している画面

Sheet1で再計算後、売上シートに戻ると結果がSheet1に変わってしまっている画面

Microsoft 公式ドキュメント(CELL 関数)でも、参照を省略すると「計算時に選択されているセル」の情報が返り、結果は安定しないため第 2 引数の省略は推奨しないと明記されています。

帳票や表紙のシートで「いまそこにあるシート名を確実に出したい」場合は、必ず同じシートのセル(A1 など)を第 2 引数に渡すことで、再計算のタイミングに左右されずシートごとに固定された結果が得られます。

逆に、別のシートの名前を別の場所に出したい場合は、次のように 'シート名'!A1 の形で参照します。

=TEXTAFTER(CELL("filename",'売上'!A1), "]")

この式はどのシートに置いても、どのタイミングで再計算しても、安定して「売上」を返します。

動かない・空になるときの確認点

式を入れたのに期待どおりの結果が出ない場合は、次の 4 点を確認してください。

原因 1:ブックを一度も保存していない

新規作成したばかりで一度も保存していないブックでは、CELL("filename",A1) が空文字列を返します。その結果、次のエラーが出ます。

  • TEXTAFTER 短縮版#N/A エラーになります(区切り文字 ] が見つからないため)
  • MID 基本式#VALUE! エラーになります(FIND] を見つけられず #VALUE! を返すため)

未保存ブックでTEXTAFTERは#N/A、MIDは#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 では TEXTBEFORETEXTAFTER を組み合わせる短縮式が使えます。

=TEXTBEFORE(TEXTAFTER(CELL("filename",A1),"["),"]")

従来版なら次のように MIDFIND[] の間を取り出します。

=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ワークシート名を取得する計算式・関数も用意しています。シート名を使ったハイパーリンクなら セルに入力されたシート名文字列を用いてハイパーリンクを作成する計算式もご参照ください。

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント