Evaluateメソッド(文字列の数式を実行します)
Evaluateメソッドは、Excelで使用する名前をオブジェクトまたは値に変換します。
簡単に説明すれば、セルに入れる数式を文字列としてVBAで実行できます。
Evaluateメソッドの構文
Application
Worksheet
Chart ・・・ グラフシートです、具体的な使用方法が不明なので解説を省略します。
修飾せずにEvaluateとだけ記述した場合はApplicationになります。
Evaluateを実際に使用する場合の多くは、修飾せずにApplicationとして使用します。
名前の長さは255文字以下にする必要があります。
ただし、このメソッドでは、参照は常に絶対参照として扱われます。
・セル範囲を表す参照演算子(:)
・セル参照の共通部分を表す参照演算子(スペース)
・セル参照の複数選択を表す参照演算子(,)
これらを使用できます。
Evaluateの糖衣構文として[ ]角括弧があります。
角括弧を使用してコードの記述を短くすることができますが、(変数等を使用した)動的な指定が出来ませんので、VBAで使う機会はかなり限られてきます。
角括弧では直接指定しますが、Evaluateでは引数に文字列を指定できます。
したがって、EvaluateではVBA内で作成した文字列が入った変数を使用することができます。
Evaluateメソッドの解説と使用例
文字列の数式を計算する
Debug.Print Evaluate("1+2+3")
Debug.Print [1+2+3]
Evaluateは文字列を""ダブルクォーテーションで囲み、文字列データとして引数に指定します。
糖衣構文の[]角括弧では直接記述します。
アクティブシートのセルを参照する
Debug.Print Evaluate("A1")
Debug.Print [A1]
Evaluateと[ ]での記述の違い、""ダブルクォーテーションで囲むかどうかの違いに注意してください。
ワークシートを指定してセルを参照する
Debug.Print Worksheets("Sheet1").Evaluate("A1")
Debug.Print Evaluate("Sheet1!A1")
Debug.Print [Sheet1!A1]
上記はいずれもSheet1のA1セルを参照しています。
名前定義でセル参照する
Worksheets("Sheet1").Range("A1").Name = "名前1"
Debug.Print Evaluate("名前1")
ここでは分かり易いようにVBAで名前定義していますが、
もちろん、事前に定義されている名前定義も使用できます。
ワークシート関数を実行する
Debug.Print Evaluate("SUM(A1:A3)")
Debug.Print [SUM(A1:A3)]
ワークシートのセルに入れることのできる数式であればEvaluateメソッドの引数として指定できます。
Evaluate("=SUM(A1:A3)")
このように、先頭の=を含めても構いません。
配列も返します
Dim ary
ary = Evaluate("A1:A3")
Dim ary
ary = [A1:A3]
この結果は、変数aryに配列が入ります。

Evaluate("{1,2,3}")
[{1,2,3}]
変数を使った複雑な指定
Dim arg1 As String
Dim arg2 As String
arg1 = "2020/1/5"
arg2 = "yyyy/mm/dd"
Debug.Print Evaluate("Text(""" & arg1 & """
+ 1,""" & arg2 & """)")
"Text(""" & arg1 & """ + 1,""" & arg2 & """)"
この部分は実行時には、
"Text("2020/1/5" + 1,"yyyy/mm/dd")"
このよになります。
ワークシートで=からそのまま入れた結果と同じになります。
Evaluateメソッドの最後に
もちろん、セルにその数式を入れてセル値を取得する事で代替え可能ではありますが、Evaluateを使えば簡単に実現できます。
シート設計およびVBAロジックを適切に作成すれば、Evaluateを使う必要性はあまりないはずです。
とはいえ、有効な代替え手段がない以上、少なくともEvaluateメソッドの存在は把握しておいた方が良いでしょう。
文字列でのセル参照と文字列の計算式について(Evaluate,INDIRECT)
同じテーマ「マクロVBA技術解説」の記事
シングルクォートの削除とコピー(PrefixCharacter)
空文字列の扱い方と処理速度について(""とvbNullString)
VBAにおける変数のメモリアドレスについて
Evaluateメソッド(文字列の数式を実行します)
Rangeオブジェクトの論理演算(差集合と排他的論理和)
VBAで写真の撮影日時や音楽動画の長さを取得する
VBAでWindowsMediaPlayerを使い動画再生する
VBAでWEBカメラ操作する
VBAで電光掲示板を作成
ユーザーに絶対に停止させたくない場合のVBA設定
列幅・行高をDPI取得しピクセルで指定する
新着記事NEW ・・・新着記事一覧を見る
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- Evaluateメソッド(文字列の数式を実行します)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。