【VBA入門】セルに数式が入力されているかどうかを判定する方法|HasFormulaとHasArrayの使い分け

Excel VBAを使って作業を自動化する際、セルに数式が入力されているかどうかを事前に確認したい場面はよくあります。
とくに、通常の数式と配列数式のどちらが設定されているかを判別できれば、より柔軟な処理分岐が可能になります。

本記事では、HasFormula プロパティと HasArray プロパティを使って、セルに数式が入力されているかどうか、またその種類を確認する方法をご紹介いたします。


目次

セルの数式の有無と種類を判定するコード例

Sub CheckFormulaType()
    Dim targetCell As Range
    Set targetCell = Range("D5")
    
    If targetCell.HasFormula = True Then
        If targetCell.HasArray = True Then
            MsgBox "セル " & targetCell.Address & " には配列数式が入力されています。"
        Else
            MsgBox "セル " & targetCell.Address & " には通常の数式が入力されています。"
        End If
    Else
        MsgBox "セル " & targetCell.Address & " には数式が入力されていません。"
    End If
End Sub

各プロパティの解説

  • HasFormula
    • セルに = から始まる数式が入力されているかどうかを判定します。
    • 結果は True または False のブール値として返されます。
  • HasArray
    • セルに配列数式(CSE数式)が設定されているかどうかを判定します。
    • HasFormula = True かつ HasArray = True の場合、そのセルは配列数式です。

使用シーンの例

  • 数式が入力されたセルだけを対象に処理を実行したいとき
  • 通常の数式と配列数式を区別して別々に処理したいとき
  • シート全体の数式の構成を自動チェック・一覧化したいとき

まとめ|数式の有無を事前に判定することで、処理の信頼性が高まる

セルの中身が静的な値なのか、それとも計算式(数式)によって導かれた値なのかを自動的に判別できれば、不要な上書きや意図しない変更を防ぐことができます。

  • .HasFormula を使えば、**「数式かどうか」**を瞬時に判定できます。
  • .HasArray を併用すれば、**「配列数式かどうか」**の識別も可能です。
  • これらの判定を使い分けることで、自動化マクロの信頼性・堅牢性が大幅に向上します。

業務で扱うExcelファイルの多くは数式を含んでおり、それを前提とした処理を行う際には、こうしたプロパティを活用して安全な処理を構築しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次