0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで関数・引数を文字列で指定する方法

Posted at

条件分岐以外で、実行関数を動的に変えたい場合に、CallByName関数を使って実現しました。

CallByName関数

指定したオブジェクトのプロパティへのアクセス、およびメソッドの実行を行います。

CallByName (object, procname, calltype, [args()]_)

引数 説明
object Variant、またはObject型の実行対象オブジェクト。
procname 文字列型のオブジェクトのプロパティ、またはメソッドの名前。
calltype 呼び出されるプロシージャを表すvbCallType型定数。
定数 説明
VbMethod メソッドを実行する
VbGet プロパティの値を取得する
VbLet プロパティの値を設定する
VbSet プロパティにオブジェクトへの参照を代入する
args() メソッド実行時の引数、またはプロパティに設定する値。

使用方法

クラスモジュール SampleCls
Public Sub Func1(val As Integer)

    Debug.Print val

End Sub

Public Sub Func2(val As Integer)

    Debug.Print val * val
    
End Sub
標準モジュール
Sub Sample1()

    For funcNum = 1 To 2
        CallByName New SampleCls, "Func" & funcNum, VbMethod, 3
    Next funcNum

End Sub

image.png

上記では呼び出す関数名をForループのカウンタから指定しています。
パターンが少なければ条件分岐で書くほうがわかりやすいでしょうが、パターンが増えてきた場合などは、CallByNameを使ったほうがすっきりと書けます。
私の場合は、シート上に関数名を列挙しておいてリストボックスのインデックスによって列挙したものの中から呼び出すといった使い方をしました。

また、オブジェクト違いで同名の関数を呼び出す際にも使うことができます。
実装の幅が増えるので是非とも覚えておきたい関数です

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?