Excelのセルには数値や文字列のデータだけではなく、=SUM(A1:C1)
のような合計や平均を算出するような数式を格納できます。このとき、セルには数式が格納されていても表面上は計算結果が表示されるため、パッと見だとそのセルに格納されているのは「データなのか数式なのか」が判断できません。
あまり頻繁にあるケースではありませんが、「そのセルに含まれるものはデータか数式か?」を判断しなければならない場合に利用できる方法があります。今回はそんな方法についてメモしておきます。
まぁこういう記事を書いてるってことは、そういうレアなケースに遭遇したってことです・・・_( _´ω`)_ペショ
最も直接的な方法で、セルに数式が入っているかどうかを判定し、真偽値(TRUE
またはFALSE
)で結果を返します。
=ISFORMULA(セル参照)
=ISFORMULA(A1)
A列 | B列(判定結果) | 説明 |
---|---|---|
100 | =ISFORMULA(A1) → FALSE |
数値のため |
=SUM(C1:C5) | =ISFORMULA(A2) → TRUE |
数式のため |
Hello | =ISFORMULA(A3) → FALSE |
文字列のため |
=AVERAGE(D1:D10) | =ISFORMULA(A4) → TRUE |
数式のため |
数式かどうかを判定したうえで、結果に応じてメッセージを表示する方法です。
=IF(ISFORMULA(A1),"数式","値")
=IF(ISFORMULA(A1),
"数式: " & FORMULATEXT(A1),
IF(ISNUMBER(A1),"数値: " & A1,
IF(ISTEXT(A1),"文字列: " & A1,"その他")))
数式かどうかを判定したうえで、数式であればどんな式が格納されているかをメッセージで表示する方法です。
=IF(ISFORMULA(A1),FORMULATEXT(A1),"数式ではありません")
=IF(ISFORMULA(B1),
"数式: " & FORMULATEXT(B1),
"値: " & B1)
複数のセルを一度に判定する方法です。
=SUMPRODUCT(--(ISFORMULA(A1:A10)))
=IF(SUMPRODUCT(--(ISFORMULA(A1:A10)))>0,"数式あり","数式なし")
=IF(ISFORMULA(A1),
"✓ 数式: " & LEFT(FORMULATEXT(A1),50) &
IF(LEN(FORMULATEXT(A1))>50,"...",""),
"× 数式ではありません")
=IFERROR(
IF(ISFORMULA(A1),
"数式: " & FORMULATEXT(A1),
"値: " & A1),
"エラーまたは空白")
Officeが古くISFORMULA
関数が利用できない場合、VBAを使用して判断することが一応できます。
Function IsFormulaCell(rng As Range) As Boolean
IsFormulaCell = rng.HasFormula
End Function
Function GetFormulaInfo(rng As Range) As String
If rng.HasFormula Then
GetFormulaInfo = "数式: " & rng.Formula
Else
GetFormulaInfo = "値: " & rng.Value
End If
End Function
ISFORMULA
関数やFORMULATEXT
関数は、Excel 2013以降でのみ使用可能です。古いバージョンのofficeでは、VBAを使用するしかなさそう。
最も簡単で確実な方法はISFORMULA関数を使用することです。より詳細な情報が必要な場合は、FORMULATEXT関数と組み合わせて使用しましょう。
レアケースではありますが、知っておくと役立つ場面があるかもしれません_( _´ω`)_ペショ