Excelの関数式が設定されているようなシートに、VBAの処理を埋め込む場合、間違って式が設定されているセルを上書いてしまうと面倒です。
そんなときは、セルに式が設定されているかどうかを判定してやることで、回避できる。
セルに式が設定されているかどうかは、CellsやRangeの「HasFormula」プロパティで判定できる。
以下のサンプルでは、セルが設定されているかどうかでセル色を変えてみた。
Sub FormulaCheck()
'ループカウンタ初期化
i = 1
'ループ
Do While Cells(i, 1) <> ""
If Cells(i, 1).HasFormula Then
'式が設定されている場合、セル色を赤色へ変更
Range(Cells(i, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Interior.ColorIndex = 3
Else
'式が設定されていない場合、セル色を緑色へ変更
Range(Cells(i, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Interior.ColorIndex = 4
End If
'ループカウンタインクリメント
i = i + 1
Loop
End Sub
また、「Formula」プロパティを使用すれば、式の取得や設定を行うことができる。
以下のサンプルでは、セルの式を取得し、別セルに設定してみた。
Sub GetSetFormula()
'変数
Dim strFormula1 As String
Dim strFormula2 As String
'式の取得
strFormula1 = Cells(10, 1).Formula
strFormula2 = Range("B10").Formula
'式の設定
Cells(11, 1).Formula = strFormula1
Range("B11").Formula = strFormula2
End Sub
以上。


コメント