概要
「ここ、本当は数式が入っているはずなのに、誰かが値を上書きしてない?」
「コピペのときに数式が消えてないか、一気にチェックしたい」
そんな “数式の破損チェック” に使えるのが ISFORMULA 関数です。
ISFORMULA はそのセルに
「数式が入っているかどうか」
だけを TRUE / FALSE で判定する、とてもシンプルな関数です。
エラーかどうかではなく、
「そもそも数式なのか、ただの値なのか」を見分けられるのがポイントです。
ISFORMULA の基本
ISFORMULA の書式と動き
書式はとてもシンプルです。
=ISFORMULA(参照)
参照したセルが数式の場合
TRUE を返します。
(=A1+B1、=SUM(C2:C10) など)
参照したセルが数式でない場合
FALSE を返します。
(手入力の数値、文字列、空白など)
ここで大事なのは、
エラーかどうかではなく “数式かどうかだけ” 見ているという点です。
例えば、A2 に次のように入っている場合を考えます。
A2 に =1/0(結果は #DIV/0! エラー)=ISFORMULA(A2) → TRUE(中身は数式)
A2 に 100(手入力の数値)=ISFORMULA(A2) → FALSE
A2 に #DIV/0! を「値として」打ち込んだ場合=ISFORMULA(A2) → FALSE(数式ではない)
「見た目の結果」ではなく、
「セルの中に数式があるか」をチェックしてくれる関数です。
数式が壊れていないかを列ごとにチェックする
本当は全部数式で埋まっていてほしい列の検査
例えば、B2:B100 には本来
「すべての行で同じパターンの数式が入っているべき」
という列があるとします。
でも現場では、
途中の行だけ値を上書きしてしまう
コピペのときに数式が消える
といった事故が起こりがちです。
そんなとき、C列を「数式破損チェック列」として使い、
C2 にこう書きます。
=ISFORMULA(B2)
これを C100 までコピーすると、
B列に数式が入っている行
C列は TRUE
B列が値や空白になっている行
C列は FALSE
となります。
FALSE の行だけが「数式が壊れている可能性がある場所」です。
ここだけ集中的に見直せばよくなります。
数式セルだけに別の処理を行う
数式が入っているセルだけにメッセージを出したり、装飾を変えたり
ISFORMULA の結果は TRUE / FALSE なので、IF と組み合わせると便利です。
例えば、B列に対して、
数式が入っていれば「数式」
入っていなければ「値」
と表示したい場合、C2 にこう書きます。
=IF(ISFORMULA(B2), "数式", "値")
これで「数式セル」と「値セル」を目に見えるラベルで区別できます。
条件付き書式と組み合わせれば、
数式セルだけ背景色を変える
値セルは別の色にする
といった可視化もできます
(条件付き書式の「数式を使用して…」に =ISFORMULA($B2) を使うイメージ)。
FORMULATEXT と組み合わせて「壊れた式」をあぶり出す
「数式があるセルだけ中身を表示する」チェック表
FORMULATEXT は「セルの中の数式を文字列で表示する」関数でしたね。
ISFORMULA と組み合わせると、
数式が入っているときだけ FORMULATEXT で中身を表示
数式がないときは空白
という “数式一覧” を作れます。
例えば、B列の数式の中身を C列に表示したい場合、C2 に次のように書きます。
=IF(
ISFORMULA(B2),
FORMULATEXT(B2),
""
)
これをコピーすると、
B列に数式がある行
C列にその数式が文字で表示される
B列が値や空白の行
C列は空白
となります。
「ここだけ数式が違う」「ここだけ数式が消えている」といった違和感を、
一覧で見つけやすくなります。
大量の列から「数式が入っていない列」を検出する
列単位の数式破損チェック
例えば、B列〜Z列まで「全部どこかの行には数式が入っているべき」
とします。
列ごとに「この列には数式が1つでもあるか」をチェックするには、
ISFORMULA と SUMPRODUCT を組み合わせるイメージです。
たとえば B列をチェックしたいとき、
どこかのセル(例:B1)に次のように書けます。
=SUMPRODUCT(--ISFORMULA(B2:B100))>0
ISFORMULA(B2:B100)
各セルが数式かどうか → TRUE/FALSE の配列
–ISFORMULA(…)
TRUE → 1、FALSE → 0 に変換
SUMPRODUCT(…)
1 の総数=「数式セルの数」
それが 0 より大きいかどうかで、
「この列には数式が少なくとも1つはある」と判定できます。
IF と組み合わせると、もっと分かりやすくなります。
=IF(SUMPRODUCT(--ISFORMULA(B2:B100))>0, "数式あり", "数式なし")
これをヘッダー行(B1, C1, …)にコピーすれば、
どの列が完全に「値だけになってしまったか」が一目で分かります。
例題
問題1
B2 に数式が入っているかどうかを判定し、
数式なら TRUE、数式でなければ FALSE を返す式を書いてください。
=ISFORMULA(B2)
問題2
B2 に数式が入っていれば「数式」、
入っていなければ「値」と表示したいです。
C2 に書く式を書いてください。
=IF(ISFORMULA(B2), "数式", "値")
問題3
B2:B100 のうち、数式が入っているセルの個数を数えたいです。
ISFORMULA と SUMPRODUCT を組み合わせた式を書いてください。
=SUMPRODUCT(--ISFORMULA(B2:B100))
問題4
B2:B100 の中で、1つでも数式が入っていれば「数式あり」、
1つも数式がなければ「数式なし」と表示したいです。
B1 に書く式を書いてください。
=IF(SUMPRODUCT(--ISFORMULA(B2:B100))>0, "数式あり", "数式なし")
問題5
B2 に数式が入っている場合だけ、その数式の内容を表示し、
数式が入っていない場合は空白を表示したいです。
FORMULATEXT と ISFORMULA を組み合わせて、C2 に書く式を書いてください。
=IF(ISFORMULA(B2), FORMULATEXT(B2), "")
まとめ
「数式破損チェック → ISFORMULA」の本質は、
セルが“何を表示しているか”ではなく
そのセルに “数式が入っているかどうか” を見ること
にあります。
型としては、まずこの 2 つを覚えておけば充分です。
=ISFORMULA(セル) ' そのセルが数式かどうか
=IF(ISFORMULA(セル), "数式", "値") ' 数式セルと値セルをラベル分け
数式で埋まっているはずの列が本当にそうなっているか、
途中で値上書きされていないかが気になったら、
一度 ISFORMULA で “数式の有無” を可視化してみてください。
どこが壊れているか、驚くほど見つけやすくなります。

