教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA API操作】コンピュータ名を取得(GetComputerName)する方法を教えて!

GetComputerName関数は、WindowsAPIの一部であり、実行中のコンピュータの名前を取得するために使用されます。この関数は、コンピュータ名を格納するバッファを指定して呼び出すことができます。

API宣言

ExcelVBAでは、GetComputerName関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。

Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

解説

パラメータ 内容
Lib 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "kernel32.dll"となります。
Alias API関数名を指定します。ここでは"GetComputerNameA"という関数名が指定されています。

引数については以下の通りです。

引数 内容
lpBuffer コンピュータ名が格納される文字列へのポインタです。この引数には、関数が呼び出される前に十分なメモリが確保されている必要があります。関数が成功すると、この文字列にコンピュータ名が格納されます。
nSize lpBufferが指すバッファのサイズを指定します。バイト単位でのサイズを表す整数型です。関数が呼び出されると、nSizeに実際に必要なサイズが格納されます。もしlpBufferがNULLの場合、この引数は無視されます。バッファが十分なサイズでない場合、関数はERROR_INSUFFICIENT_BUFFERを返し、nSizeに必要なサイズが格納されます。

使い方

GetComputerName関数を使用するには、コンピュータ名を格納するバッファを指定する必要があります。以下のコードは、GetComputerName関数を使用して、コンピュータ名を取得する例です。

Sub GetComputerName()
    Dim buffer As String * 256
    Dim length As Long
    length = Len(buffer)
    ' コンピュータ名を取得する
    GetComputerName buffer, length
    ' コンピュータ名を表示する
    MsgBox "コンピュータ名は " & Left(buffer, length) & " です。"
End Sub

このコードでは、変数bufferを256バイトの文字列型で宣言しています。この変数に、コンピュータ名を格納します。length変数に、buffer変数の長さを設定します。
GetComputerName関数を呼び出すために、GetComputerName関数にbufferとlength変数を渡します。GetComputerName関数は、実行中のコンピュータの名前をbuffer変数に格納します。その後、MsgBox関数を使用して、コンピュータ名を表示します。

プログラミング例

以下のコードは、GetComputerName関数を使用してコンピュータ名を取得し、セルに表示する例です。

Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub GetComputerNameExample()
 Dim buffer As String * 256
 Dim length As Long
 length = Len(buffer)
 ' コンピュータ名を取得する
 GetComputerName buffer, length
 ' コンピュータ名をセルに表示する
 Range("A1").Value = Left(buffer, length)
End Sub

このコードでは、GetComputerName関数を使用して、コンピュータ名をbuffer変数に格納します。その後、Rangeオブジェクトを使用して、A1セルにコンピュータ名を表示します。

まとめ

GetComputerName関数を使用することで、現在実行されているコンピュータの名前を取得することができます。WindowsAPIを使用することで、より高度な機能を実現することができますので、是非活用してみてください。