セルが値か数式かを判定するには
セルには値と数式の2種類が設定できます。このとき、値と数式のどちらが設定されているのかを調べたい場合に、HasFormulaプロパティで判定できます。
HasFormulaプロパティはRangeオブジェクトのプロパティの1つです。
なお、HasFormulaプロパティを使ってシートにある数式セルを探す方法を別ページで紹介しています。詳細は「VBAで数式が設定されているセルを高速で探す」をご参照ください。
構文
Property Range.HasFormula As Variant
親オブジェクト | Rangeオブジェクトを指定します。セルは1つでも複数セル範囲でも構いません。 |
戻り値 | Rangeオブジェクトが示すセル範囲の全てのセルに数式が設定されている場合はTrueを返します。
Rangeオブジェクトが示すセル範囲の全てのセルに数式が設定されていない場合はFalseを返します。 それ以外はNullを返します。 |
HasFormulaプロパティでNullを返す条件は、Rangeオブジェクトが複数のセル範囲の各セルで値や数式が混在している場合です。
例えば、4つのセル範囲をRangeオブジェクトが指している場合に、1つが値で、2つが数式で、1つが未設定(空)のような場合に値なのか数式なのかを判定できないためNullを返します。
同様に、4つのセルが全て数式であればTrueを返し、全て値であればFalseを返します。
1. セルが値か数式か調べる
A1セルに値か数式かどちらが設定されているかを判定するサンプルです。数式が設定されていればTrue、値であればFalseがイミディエイトウィンドウに出力されます。
1 2 3 |
Sub HasFormulaTest() Debug.Print Range("A1").HasFormula End Sub |
2. 選択セル範囲の数式セルを調べる.
セル範囲を選択して以下の関数を実行すると、数式セルの座標と値がイミディエイトウィンドウに出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub HasFormulaInSelection() Dim r As Range '// セル '// 選択セル範囲をループ For Each r In Selection '// 数式セルの場合 If r.HasFormula = True Then '// セル座標とセル値を出力 Debug.Print r.Address(False, False) & ":" & r.Value End If Next End Sub |
実行例
B1,B2,C4の3つのセルに数式がある状態で、B1~C4セルを選択して実行すると、以下が出力されます。
B1:1
B2:1
C4:4