Excel関数 逆引き集 | 数式破損チェック → ISFORMULA

Excel
スポンサーリンク

概要

「ここ、本当は数式が入っているはずなのに、誰かが値を上書きしてない?」
「コピペのときに数式が消えてないか、一気にチェックしたい」

そんな “数式の破損チェック” に使えるのが 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 で “数式の有無” を可視化してみてください。
どこが壊れているか、驚くほど見つけやすくなります。

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