VBAのAliasで関数や変数の別名を設定する方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Aliasの概要

関数の別名を定義 VBAの予約語

Alias

概要 Alias キーワードは、VBAの Declare ステートメントで外部DLL関数を定義する際に、関数の別名を付けるために使用されます。これにより、VBA内で異なる名前を使用しながら、同じ外部関数を呼び出すことができます。

  • Windows APIなどの外部DLL関数に独自の別名を付与できる。
  • 関数名が長すぎる場合に短縮できる。
  • VBAの予約語と重複する名前を回避できる。

Aliasの基本的な使い方

以下の例では、Windows API の GetTickCount 関数を VBA で TickCount という別名で利用する方法を示します。

' GetTickCount 関数の別名を TickCount に変更
Declare PtrSafe Function TickCount Lib "kernel32" Alias "GetTickCount" () As Long

Sub SampleAlias()
    MsgBox "現在のTickCount: " & TickCount
End Sub

解説:

  • Declare PtrSafe Function で外部DLLの関数を定義します。
  • Alias "GetTickCount" を指定することで、VBA内では TickCount という名前で関数を利用可能。
  • Windows の GetTickCount は、システムの起動後のミリ秒を取得するAPIです。

異なるライブラリ名を持つ関数を統一する

以下のように、32ビット版と64ビット版のDLLが異なる場合に、Alias を使って統一した名前で利用できます。

#If VBA7 Then
    Declare PtrSafe Function MessageBox Lib "User32" Alias "MessageBoxA" (ByVal hWnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
#Else
    Declare Function MessageBox Lib "User32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
#End If

Sub ShowMessageBox()
    MessageBox 0, "Hello, VBA!", "Message Box", 0
End Sub

解説:

  • MessageBoxA は、Windows のメッセージボックスを表示するAPI関数です。
  • 64ビット環境(VBA7以降)では、ポインタ型に LongPtr を使用。
  • 32ビット環境では Long 型を使用し、同じ関数名 MessageBox で統一して使えるようにする。

VBAの予約語と関数名が衝突する場合の回避策

外部関数の名前がVBAの予約語と重複する場合、Alias を使って異なる名前に変更できます。

' VBAのReservedWord関数があると仮定
Declare PtrSafe Function VBA_Function Lib "custom.dll" Alias "Function" () As Long

Sub CallCustomFunction()
    MsgBox VBA_Function()
End Sub

解説:

  • Function はVBAの予約語のため、そのままでは関数名として使用できない。
  • Alias "Function" を使って、VBA内では VBA_Function という名前で呼び出せるようにする。

注意点

  • 外部DLL関数専用: Alias は外部DLLの関数に対してのみ有効で、通常のVBA関数には適用できない。
  • 関数名の変更のみ: 別名を設定しても、関数の動作や引数の仕様は変わらない。
  • 正確な関数名の指定が必要: Alias で指定する名前は、DLLに存在する関数の正確な名称を入力する必要がある。

よくある質問

Q: Alias を使うメリットは何ですか?
A: 長い関数名を短縮したり、VBAの予約語と衝突しないように関数名を変更できます。
Q: Alias をVBAの通常の関数に使えますか?
A: いいえ、Alias は Declare ステートメントで外部DLL関数に対してのみ使用できます。
Q: 関数名を変更した場合、引数の仕様も変わりますか?
A: いいえ、Alias で関数名を変更しても、引数の仕様や戻り値は元の関数のままです。

まとめ

  • Alias は Declare ステートメントで外部DLL関数の別名を設定するために使用される。
  • 関数名が長すぎる場合や、VBAの予約語と衝突する場合に有用。
  • 32ビットと64ビット環境の違いを吸収するための統一的な名前の設定に利用可能。
  • 関数の動作や引数の仕様は Alias では変更できない。
  • Windows API などの外部関数を呼び出す際に、使いやすい名前を付けることができる。