Excel関数 逆引き集 | 値セルのみ抽出 → NOT(ISFORMULA)

Excel
スポンサーリンク

概要

「この範囲の中で、“手入力の値だけ” 抜き出したい」
「数式と値が混ざっているけど、値セルだけ別表にしたい」

こういうときに使えるのが
NOT(ISFORMULA) を条件にした抽出です。

  • ISFORMULA … そのセルが「数式かどうか」を TRUE / FALSE で判定
  • NOT(ISFORMULA) … 「数式ではない(=値セル)」なら TRUE

これを FILTER などと組み合わせれば、
「値セルのみ抽出」がきれいにできます。


NOT(ISFORMULA) の基本

ISFORMULA のおさらい

まずは ISFORMULA から。

=ISFORMULA(参照)

参照したセルが数式なら TRUE
参照したセルが数式でない(手入力の数値、文字列、空白など)なら FALSE

という動きをします。

例:A2 にそれぞれ入っているとします。

=1/0(#DIV/0! になる式)
=ISFORMULA(A2) → TRUE(中身は数式)

100(手入力の数値)
=ISFORMULA(A2) → FALSE

#DIV/0! を「文字として」打ち込んだだけ
=ISFORMULA(A2) → FALSE(数式ではない)

NOT(ISFORMULA) で「値セル」判定に変える

NOT は TRUE / FALSE を反転させる関数です。

=NOT(ISFORMULA(A2))

とすると、

A2 が数式 → ISFORMULA(A2) は TRUE → NOT で FALSE
A2 が値(または空白) → ISFORMULA(A2) は FALSE → NOT で TRUE

つまり
「数式ではないセル」(値セル)だけ TRUE
にできます。

この TRUE を「抽出条件」に使う、というのが本題です。


値セルのみ抽出の基本形

テンプレート

FILTER 関数と組み合わせると、形はこうなります。

=FILTER(抽出したい範囲, NOT(ISFORMULA(判定したい範囲)))

NOT(ISFORMULA(判定範囲)) が TRUE の行だけ、
FILTER が拾ってきてくれます。

つまり
「数式ではないセル(値セル)の行だけ」
抽出される、という仕掛けです。


1列から「値セルだけ」を抜き出す

A列の中で値セルのみを縦に抽出

例:A2:A20 に数式と値が混ざっているとします。
この中から「値セルだけ」を別の場所に一覧表示したい。

別セル(たとえば C2)にこう書きます。

=FILTER(A2:A20, NOT(ISFORMULA(A2:A20)))

動きはこうです。

A2:A20 の中で
数式セル → ISFORMULA = TRUE → NOT で FALSE → 抽出されない
値セル → ISFORMULA = FALSE → NOT で TRUE → 抽出される

結果として、値セルだけが上から詰めて並びます。

「一時的な手入力だけを集めたい」
「値を上書きしてしまったセルだけ確認したい」
といったときに便利です。


行ごと「値行だけ」を抜き出す

計算列が“値になってしまった行”を見たい

たとえば、A〜D列が表、D列が本来「数式で埋まっていてほしい列」だとします。
誰かが D列の一部を手入力で上書きしてしまったかもしれない、という状況。

「D列が値になってしまっている行だけ」を抜き出すには、こう書けます。

別セル(たとえば F2)に:

=FILTER(A2:D20, NOT(ISFORMULA(D2:D20)))

動き。

D列が数式の行
ISFORMULA(D) = TRUE → NOT = FALSE → 抽出されない

D列が値や空白の行
ISFORMULA(D) = FALSE → NOT = TRUE → 抽出される

つまり
「D列が“値セル”になっている行だけ」
が丸ごと抽出されます。

計算列の「破損行(値上書き行)」を見つけるのにとても役立ちます。


値セルだけを別表にして加工する

数式結果ではなく「手入力データ」だけを対象にしたい場合

たとえば、A2:A50 に「最終値」が入っているとして、
その中には

  • 元からの手入力の値
  • 数式で計算された結果

が混ざっているとします。

「手入力の値だけを別表にして、別の分析をしたい」とき。

=FILTER(A2:A50, NOT(ISFORMULA(A2:A50)))

とすれば、「人が入力した値」だけが抽出されます。

抽出した値をさらに別の式で加工しても、
「元が数式だったもの」は含まれないので、
“生データだけの分析” にも使いやすくなります。


値セルが一つもない場合の対策

FILTER の「該当なしエラー」を避ける

もし対象範囲が「全部数式」で「値セルが一つもない」場合、
NOT(ISFORMULA(範囲)) は全部 FALSE になり、FILTER は #CALC! エラーになります。

これを避けたいときは、IFERROR で包みます。

=IFERROR(
  FILTER(A2:A20, NOT(ISFORMULA(A2:A20))),
  ""
)

値セルが1つ以上ある
→ 普通に抽出される

値セルが1つもない
""(空白)を返す

という安全な動きになります。


例題

問題1

A2:A20 に数式と値が混在しています。
この中から「数式ではないセル(値セル)」だけを縦に抽出したいです。
B2 に書く FILTER × NOT(ISFORMULA) の式を書いてください。

=FILTER(A2:A20, NOT(ISFORMULA(A2:A20)))

問題2

A〜D列の表があり、D列は本来「数式で埋まっているべき列」です。
D列が“数式ではない行”(値または空白)だけを、A〜D列ごと別表に抽出したいです。
E2 に書く式を書いてください。

=FILTER(A2:D20, NOT(ISFORMULA(D2:D20)))

問題3

B2:B100 に最終結果が入っています。
この中から「手入力の値だけ」を別の列(D列)に抽出したいです。
D2 に書く FILTER × NOT(ISFORMULA) の式を書いてください。

=FILTER(B2:B100, NOT(ISFORMULA(B2:B100)))

問題4

A2:A20 の中で、値セルが一つもない場合は空白(””)を返し、
1つ以上ある場合は値セルだけを抽出したいです。
B2 に書く IFERROR と FILTER、NOT、ISFORMULA を組み合わせた式を書いてください。

=IFERROR(FILTER(A2:A20, NOT(ISFORMULA(A2:A20))), "")

問題5

B2 に数式と値が混在する可能性があります。
B2 が「数式ではないときだけ TRUE、数式のときは FALSE」を返す判定式を書いてください。

=NOT(ISFORMULA(B2))

まとめ

「値セルのみ抽出 → NOT(ISFORMULA)」のポイントは、

  • ISFORMULA で「数式かどうか」を判定
  • NOT で反転して「数式ではない(=値セル)だけ TRUE」にする
  • その TRUE を FILTER の条件に使う

という流れです。

型としては、次の2つを覚えておくと応用が効きます。

=NOT(ISFORMULA(セル))                         ' そのセルが値かどうか
=FILTER(範囲, NOT(ISFORMULA(判定範囲)))      ' 値セルだけ抽出

数式と値がごちゃまぜになっていてモヤモヤする表があれば、
一度「数式セルだけ」「値セルだけ」に分けて眺めてみると、
構造も問題点もぐっと見えやすくなります。

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