要点 —
CELL(info_type, [reference])はセルの中の値ではなく、 セルに関するメタデータ——アドレス、書式コード、内容の種類、列の幅、あるいは ブックのフルパスとシート名——を返します。何を尋ねるかはキーワード文字列 ("address"、"filename"、"format"、"type"、"col"、…)で選びます。 最新の Excel では、その仕事の多くにもっときれいな代替がありますが、CELL("filename",A1)は今なお、現在のファイルパスとシート名を得るための唯一の ネイティブな(VBA を使わない)方法です。
=CELL("address", C5) ' -> $C$5 (絶対アドレスをテキストで)
=CELL("filename", A1) ' -> C:\Reports\[Sales.xlsx]January (パス + シート)
=CELL("type", A1) ' -> "b" 空白, "l" ラベル/テキスト, "v" 値
=CELL("col", C5) ' -> 3 (列番号)
ほとんどの関数がセルの中に手を入れて値を取り出すのに対し、CELL はセルのまわりを 歩いてその周辺を報告します——どこにあるか、どう書式設定されているか、どんな種類のものを 保持しているか、どのファイルに入っているか。これはメタデータのプローブであり、その1つの 息の長い用途(と1つの厄介な罠)を知ることが、必要なことのほとんどです。
この記事でわかること
- 考え方の軸:CELL は値の読み取りではなくメタデータのプローブ
- なぜ
info_typeはキーワード文字列なのか——そしてスペルを間違えると何が起きるか - CELL がいまも握る仕事:ファイル名・パス・シート名の抽出
- なぜ
"format"は謎めいたコードを返し、なぜ古くなるのか - CELL が「間違ったものを返す」ように見せる再計算の罠
考え方の軸:メタデータのプローブ
これまで出会ったほかのどの関数も、セルの中にあるもの——その数値、そのテキスト、その
数式の結果——を返します。CELL は例外です:セルについての事実を返します。どの事実が
欲しいかを第1引数 info_type で伝え、第2引数でセルを指し示します:
=CELL("row", C5) ' -> 5 このセルは何行目か?
=CELL("width", C5) ' -> 8 その列はどれくらい広いか?
その第1引数がすべてを決めます。"address" は絶対アドレスをテキストで、"row" と
"col" は座標を数値で、"contents" は値を、"type" は中身を分類し、"format" は
表示形式を報告し、"filename" はブックのパスとシートを返し、"width" は列を測ります。
これは COUNTIF の条件が文字列であるのと同じ発想の
一族です——挙動は手渡すひとかたまりのテキストで駆動されるので、打ち間違いは、誤った
数値のようにはエラーになりません。=CELL("adress", C5)(スペルミス)は #VALUE! を
返します。
CELL がいまも握る仕事:ファイル名・パス・シート名
これが、最新のブックでも CELL が生き残る理由です。CELL("filename", …) は、VBA を
使わずにブック自身のパスと現在のシート名を読む唯一の組み込みの方法です:
=CELL("filename", A1)
' -> C:\Reports\[Sales.xlsx]January
文字列全体が欲しいことはめったになく——欲しいのはその一部なので、
テキスト関数で切り出します。シート名(] より後ろの
すべて)がよくある要望です:
=MID(CELL("filename",A1), FIND("]",CELL("filename",A1))+1, 255)
' -> January (シート名だけ)
このたった1つの呼び出しに2つの罠が潜んでいて、どちらも見落としやすいものです:
- 参照を渡す。 第2引数なしの
CELL("filename")は技術的には動きますが、どこであれ 最後に変更されたセルについて報告するので、編集するたびにずれます。必ず固定して ください:CELL("filename", A1)。 - 先にファイルを保存する。 一度も保存されていないブックにはまだパスがないので、
CELL("filename",A1)は空文字列を返します——エラーではなく、ただの空白です。 「なぜシート名の数式が空なの?」を追う分析者は、ほぼ間違いなく未保存のファイルに ぶつかっています。
なぜ「format」は謎めいたコードを返すのか(そして古くなるのか)
CELL("format", …) は便利そうに聞こえます——「このセルがどう書式設定されているか教えて」
——が、最もがっかりさせる info_type です。ダイアログで見る書式文字列ではなく、短い
コードを返します:小数2桁の通貨には "C2"、桁なしのパーセントには "P0"、日付
スタイルの1つには "D1"、標準には "G"。
そこから2つの問題が続きます。第1に、コードは損失のある、謎めいた対応づけです——多くの
ユーザー定義書式が同じコードに潰れ、参照はロケール依存なので、CELL("format",…) で処理を
分岐させるのは脆弱です。第2に、さらに悪いことに:"format" は値ではなく書式を読み、
セルの書式を変えても再計算は起きません。だからセルを再書式設定した後も、CELL の結果は
何か(F9)が再計算を強いるまで古いコードを表示し続けます。「書式が間違って表示される」
という混乱は、ほぼ常にバグではなく計算が古いだけの問題です——そしてこれが、"format" で
数式を駆動するのが避けるべき罠である理由です。
再計算と揮発性の罠
上記の「古さ」は、それ自体を1つのルールとして述べる価値があります。なぜなら "format" を
超えて人を焼くからです。CELL は揮発性関数です——シートが変わるたびに再計算するので、
あちこちに散らすと大きなブックを静かに遅くします。それでいて逆説的に、それが報告する特定の
事実(とりわけ書式と色)は再計算のときにだけ更新され、書式変更だけでは再計算になりません。
心に留めるべき考え方:CELL は今この瞬間ではなく、最後の再計算の時点での真実を伝えます。
迷ったら、"format" や "color" の読み取りを信じる前に F9 を押しましょう。
判断のポイント
CELL は、ほとんどの刃がより良い専用の道具に置き換えられた十徳ナイフです。アドレスが
欲しい? ADDRESS、あるいは素直な ROW/COLUMN の
ほうが明快です。種類を知りたい? IS関数
(ISNUMBER、ISTEXT、ISBLANK)が意図どおりを述べます——しかも CELL の "type" は
粗いことに注意:空白(b)、ラベル/テキスト(l)、値(v)しか区別せず、"" を返す
数式はラベルであって空白とは数えられません。値が欲しい? セルを参照するだけです。
残るもの、そして CELL を道具箱にとどめるものは "filename" です——パスとシート名には
これよりきれいなネイティブの供給源がありません。使用が着実に減っているのは不思議では
ありません:ほかのすべての刃が引退させられる一方で、たった1つの良い刃が切れ味を保って
いる、その音なのです。
ExcelMaster の使いどころ
シート名を取り出す CELL("filename",…) + MID + FIND の組み合わせは、毎回調べ直す
たぐいのものです。ExcelMaster に「現在のシート名を A1 に入れて」や「ヘッダーに
ブックのフォルダーパスを表示して」と伝えれば、入れ子の数式を正しく書きます——固定した
参照、保存状態への対処、パスの正しい一片——ので、記憶から組み立て直す必要はありません。
セルの書式や種類を尋ねれば、CELL が謎めいたコードしか返さないところでは、より鋭い道具
(IS関数、ADDRESS)へと導きます。
よくある質問
ExcelのCELL関数は何をしますか?
=CELL(info_type, [reference]) は、セルの値ではなくセルについての情報——アドレス、行、
列、表示形式コード、内容の種類、列の幅、ブックのファイル名など——を返します。何を返すかは
info_type キーワードで選びます。たとえば =CELL("address", C5) は $C$5 を得ます。
Excel でシート名やファイルパスを取得するには?
=CELL("filename", A1) を使います。これは C:\Reports\[Sales.xlsx]January のように
フルパスとシート名を返します。シート名だけを取り出すには、こう包みます:
=MID(CELL("filename",A1), FIND("]",CELL("filename",A1))+1, 255)。先にブックを保存
しておく必要があり、そうでなければ結果は空文字列になります。
CELL("format") が間違った書式を表示するのはなぜですか?
セルの書式を変えても再計算は起きないので、CELL("format",…) は Excel が再計算するまで
前の書式コードを表示し続けます。F9 を押して強制してください。また結果はフルの書式
文字列ではなく短いコード("C2"、"P0"、"G")です——これが、それで処理を分岐させるのが
脆弱な理由です。
CELL の「type」の結果 b、l、v は何を意味しますか?
"b" はセルが空白、"l" はラベル(テキスト)を保持、"v" は値(数値や
その他の非テキスト)を保持することを意味します。粗いチェックです——"" を返す数式は l
と読まれます。正確な型テストには ISNUMBER や ISBLANK のような
IS関数を使います。
CELL関数は揮発性ですか?
はい。CELL はワークシートが変わるたびに再計算するので、多用すると大きなブックを遅くします。
CELL だけが唯一こなすファイル名/パスの用途を除けば、揮発性でない代替——ADDRESS、ROW、
COLUMN、または IS関数——を優先しましょう。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-09。
関連ガイド: ExcelのADDRESS関数 · ExcelのIS関数 · ExcelのFORMULATEXT & ISFORMULA · ExcelのTYPE & N関数
