Excel VBAの「CallByName 関数」について解説します。
CallByName 関数とは
Excel VBA の CallByName 関数は、実行時動的にオブジェクトのプロパティを取得・設定したり、メソッドを呼び出したりするための関数です。通常、VBAではオブジェクトのプロパティやメソッドを直接記述して操作しますが、CallByName 関数を使うことで、文字列で指定したプロパティやメソッドを動的に操作できます。
CallByName 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
CallByName 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
CallByName(object, procname, calltype [,args()])
引数
指定項目 | 説明 |
---|---|
object | 【必須】実行するオブジェクトを指定します |
procname | 【必須】プロパティまたはメソッドの名前を指定します |
calltype | 【必須】呼び出すプロシージャの種類を指定します(次表参照) |
args() | 【省略可】プロパティまたはメソッドに渡す引数を指定します |
引数 calltype に指定する定数または値は次のとおり
定数 | 値 | 内容 |
---|---|---|
vbMethod | 1 | メソッドを実行します |
vbGet | 2 | プロパティを取得します |
vbLet | 4 | プロパティを設定します |
vbSet | 8 | オブジェクトの参照を設定します |
戻り値
戻り値は、実行したオブジェクトのプロパティまたはメソッドの取得値です。
解説(使用例)
CallByName 関数の使い方について、サンプルを使って解説します。
CallByName 関数使用サンプル
CallByName 関数でオブジェクトのプロパティやメソッドを動的に操作する例を紹介します。
UserForm上のコントロールに対する例
TextBox と CommandButton を操作する例です。
'■CallByName関数サンプル1(UserFormのControl操作例)
Sub CallByName_Sample01()
Dim ctrl As Control
Dim res As Long
UserForm1.Show vbModeless
For Each ctrl In UserForm1.Controls
' TextBox1のプロパティを設定 VbLet
If ctrl.Name = "TextBox1" Then
CallByName ctrl, "BackColor", VbLet, vbYellow
' TextBox1のプロパティを取得 VbGet
res = CallByName(ctrl, "Left", VbGet)
End If
' CommandButton1をMoveメソッドで移動
If ctrl.Name = "CommandButton1" Then
CallByName ctrl, "Move", VbMethod, res, 50
End If
Next ctrl
End Sub
コードを実行した直後の UserForm1 は次のように表示されます。

VbLetでTextBox1のプロパティを設定
CallByName ctrl, "BackColor", VbLet, vbYellow
でバックカラーを黄色に設定しています。
設定後の UserForm1 の表示は次のとおりです。

VbGetでTextBox1のプロパティを取得
res = CallByName(ctrl, "Left", VbGet)
で TextBox1 のプロパティーから Left の数値を取得しています。
これは、次の CommandButton1 の位置を TextBox1 の位置と揃えるための情報取得です。
CommandButton1をMoveメソッドで移動
CallByName ctrl, "Move", VbMethod, res, 50
で CommandButton1 の位置をムーブメソッドを使って移動させています。Move メソッドの引数は (Left, Top) の順で設定しています。Left には先ほど VbGet で取得して変数に格納した TextBox1 の左位置 (res) としています。
CommandButton1 が移動した UserForm1 の画像が次のとおりです。

TextBox1 と CommandButton1 の表示位置が左側で揃って表示されました。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
VBA の CallByName 関数は、オブジェクトのプロパティやメソッドを動的に操作するための関数ですが、VBAの中では使用頻度が高いとは言えない関数です。以下に使われるケース使われるケースと、使われない理由を列記しておきます。
CallByName関数が使われるケース
使用頻度が低い理由
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;