Evaluateメソッド活用術

セル範囲を取得する

セル範囲を表すRangeオブジェクトの取得には、通常はRangeプロパティやCellsプロパティを使用します。
もっと簡単に書きたい場合は、Evaluateメソッドのショートカットである角カッコ([ ])を使用するのが便利です。
このショートカットを使用する場合、セル範囲を表す文字列を「""」で囲む必要もありません。

[B2:E3].Interior.Color = vbBlue

実行前の状態。ここから、B2:E3のセル範囲の塗りつぶしの色を変更する。

B2:E3のセル範囲の塗りつぶしの色が青になった。

このページの先頭へ戻る

描画オブジェクトを取得する

セル範囲を表すRangeオブジェクトだけでなく、図形を表すDrawingObjectオブジェクト(Shapeオブジェクトではないことに注意。なお、DrawingObjectオブジェクトというのは仮の呼び方で、RectangleやOvalといったオブジェクトの総称です。詳しくはリンク先を参照)も、Evaluateメソッド、およびそのショートカットである角カッコで取得することができます。
具体的には、やはりその名前を[ ]で囲むだけで、セル範囲同様、""で囲む必要もありません。
図形だけでなく、グラフ(ChartObjectオブジェクト)や各種コントロールも、この方法で取得することができます。
なお、同じ名前を複数のオブジェクトに付けることが可能ですが、同じ名前が複数あるオブジェクトをこの方法で指定した場合、zオーダーがより小さい(より後ろにある)オブジェクトが優先されます。
また、同じ名前がセル範囲にも設定されていた場合は、描画オブジェクトが優先されます。

[四角形 1].Delete

「四角形 1」という名前の付いた描画オブジェクトを削除する。

「四角形 1」が削除された。

このページの先頭へ戻る

ワークシート関数を利用する

Evaluateメソッドは、与えられた名前からオブジェクトを取得する機能のほか、文字列として与えられた数式を計算する機能も持っています。
この「数式」には、四則演算だけでなく関数も使用可能。
WorksheetFunction経由では使えない関数もありますが、Evaluateメソッドではそうした関数も使える場合があります。
また、WorksheetFunctionを使うより、コード自体も短く、簡潔になります(必ずしも簡潔であればいいというわけではありませんが)。
たとえば、次の例は、「作業範囲」という名前が付けられたセル範囲が存在した場合、そのセル範囲を赤で塗りつぶします。

If [ISREF(作業範囲)] Then
    [作業範囲].Interior.Color = vbRed
End If

C3:D5のセル範囲に「作業範囲」という名前が付けられている。

作業範囲が赤く塗りつぶされた。

さらに、この方法の応用で、指定した名前のシートが存在するかどうかも、簡単に調べることができます。
次のコードでは、入力ボックスに入力されたシート名のシートが作業中のブック内に存在している場合は、そのシートをアクティブにします。存在しない場合は、メッセージを表示します。

Dim s As String
s = InputBox("シート名を入力してください。")
If s = "" Then Exit Sub
If Evaluate("ISREF(" & s & "!A1)") Then
    Sheets(s).Activate
Else
    MsgBox "そのシートは存在しません。"
End If

このページの先頭へ戻る

配列を作成する

やはり数式を計算する用法ですが、Evaluateの引数に配列定数を表す文字列を指定し、二次元配列を簡単に作成することができます。
Array関数では一次元配列しか作成できないので、この方法を知っていると結構便利だと思います。
次の例は、作成した二次元配列をC3:D5のセル範囲に入力します。

[C3:D5].Formula = [{1,3;2,2;"=SUM(C3:C4)","=SUM(D3:D4)"}]

コードの実行前。このC3:D5のセル範囲に二次元配列を入力する。

コードの実行結果。
4つの数値と2つの数式が3行×2列のセル範囲に入力されている。

このページの先頭へ戻る