【マクロVBA】セルが数式を含んでいるか判断・判定する方法!HasFormula関数で簡単チェック!

条件分岐

VBAを使ってExcelのデータ処理を行う際、セルが数式を含んでいるかどうかを判断する必要がある場面があります。

そこで活用できるのが「HasFormula」関数です。
この関数を使うことで、特定のセルが数式を含んでいるかどうかを簡単にチェックすることができます。

この記事では、HasFormula関数の使い方や注意点について詳しく解説します。
ぜひ参考にしてください。

それでは見ていきましょう!




⬛︎こんな事ができるようになる!

・セルが数式を含んでいるかどうかを判断できるようになる

 

■構文

HasFormula関数は、指定したセルが数式を含んでいるかどうかを判断するための関数です。

この関数は論理値(TrueまたはFalse)を返し、数式が含まれていればTrue、含まれていなければFalseとなります。

戻り値対象セル.HasFormula

IsEmpty関数は、指定したセルが数式を含んでいるか判断するために使用されます。

戻り値True(空白)またはFalse(空白でない)となります。

⬛︎忙しい人向けのコピペ用ソースコード

Sub CheckFormula()
Dim rng As Range
Set rng = 対象セル

If rng.HasFormula Then
'数式の処理
Else
'数式でないときの処理
End If
End Sub

対象セルはカスタムして使用してください。
数式の処理」または「数式でないときの処理」を当てはめることで場面に合わせて処理できます。

■セルが数式を含んでいるか確認する方法

まずはセルが数式を含んでいるかを判断する方法について説明します。

・通常の文字・文字数値が入力されてある場合

まず通常の文字・文字数値が入力されてある場合を見ていきましょう。

下図の見本をご覧ください。

B3にはでなく「123」と入力された数値があります。
今回はこちらを数式なのか判断してみたいと思います。

では再度構文を見ていきましょう。

戻り値対象セル.HasFormula

では構文に当てはめてみましょう。
対象セルB3のセルなのでそのままB3が当てはまります。
 
そこからIfを使用することで数式の時は「数式を含んでいます」を出力数式でない場合は「数式が含まれていません」という出力をします。
 
それではソースコードを見ていきましょう。
 
Sub CheckFormula()
Dim rng As Range
Set rng = Range(“B3”)

If rng .HasFormula Then
 Cells(3, 4) = “数式を含んでいます。”
Else
 Cells(3, 4) = “数式が含まれていません。”
End If
End Sub
それでは実行してみましょう。
結果はこのようになります。
 
123と入力されているだけで「数式」でないので「数式が含まれていません」という結果になりました。

 

四則演算(+-/*)を使用している場合

今度は足し算や割り算をしたセルを判断してみたいと思います。

下図の見本をご覧ください。

対象セルには「1+1」という計算式が入っていますね。

それでは先ほどのコードを実行してみましょう。
結果はこのようになります。

「1+1」は数式と判断されて、「数式を含んでいます」という結果になりました。

関数を使用している場合

今度は関数を使用しているセルを判断してみたいと思います。

下図の見本をご覧ください。

対象セルには「SUM(B5:B6)」という合計を求める関数が入っていますね。

それでは先ほどのコードを実行してみましょう。
結果はこのようになります。

関数を使用している場合は数式と判断されて、「数式を含んでいます」という結果になりました。

参照している場合

今度は別のセルを参照したセルを判断してみたいと思います。

下図の見本をご覧ください。

対象セルには「B4」という1つ下のセルを参照する式が入っていますね。

それでは先ほどのコードを実行してみましょう。
結果はこのようになります。

参照したセルは計算の有無にかかわらず数式と判断されて、「数式を含んでいます」という結果になりました。

⬛︎よくあるエラーと対処法

HasFormula関数を使用する際によく発生するエラーとその対処法についてお伝えします。

以下の点に注意してください。

数式の判定

先ほどの検証で察した方もおられると思いますが、
数式とは「=(イコール)」を使用した場合に「数式」と判断される認識で問題ないと思います。

特に「=B3」など、参照しているだけで計算はしていないのですが、こちらは「数式」と判断されます。

こちらの特性を理解した上でご活用ください

「オブジェクトが必要です」というエラー

このエラーは、HasFormula関数を適用する対象のセルが正しく指定されていない場合に発生します。

セルの指定方法や範囲を確認してください。

対処法は HasFormula関数を使用する前に、適切な範囲をRangeオブジェクトで指定し、セルを参照するようにします。
例えば、以下のようにセルの範囲を正確に指定します。

Dim rng As Range
Set rng = Range(“A1”)

・「オブジェクトのメソッドまたはプロパティがありません」というエラー

このエラーは、HasFormula関数が使用される対象のセルに数式が含まれていない場合に発生します。
HasFormula関数は数式の有無を判定するため、セルに数式が入力されている必要があります。

対処法はHasFormula関数を使用する前に、セルが数式を含んでいるかどうかを確認しましょう。

■練習問題

練習問題も別の記事でまとめているので是非参考にしてみてください!

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

⬛︎まとめ

いかがだったでしょうか?

HasFormula関数を使用することで、マクロVBAでセルが数式を含んでいるかどうかを簡単に判断することができます。

この関数を活用することで、特定のセルに数式が含まれている場合に適切な処理を行うことができます。

この記事ではHasFormula関数の使い方や注意点について解説しました。
VBAを使ったExcelデータ処理で数式の判定が必要な場合は、HasFormula関数を活用して効率的な処理を行いましょう。

それでは次回の記事でお会いしましょう。

 

 

コメント