教えて!ExcelVBA!

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

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

f:id:m_kbou:20200419203053p:plain

コンピュータ名を取得するWindowsAPI関数(GetComputerName)について説明します。

 

 

構文

記述方法は以下の通りとなります。

■Win32 API

(API定義)

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

---------------------------------

(VBA記述)

GetComputerName (lpBuffer,nSize)

■Win64 API

(API定義)

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

---------------------------------

(VBA記述)

GetComputerName (lpBuffer,nSize)

[説明]:

コンピュータ名を取得するAPI関数はGetComputerName関数となります。VBAから呼び出して使用する場合には、

---------------------------------

(Win32APIの場合)
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

---------------------------------

(Win64APIの場合)
Declare PtrSafe Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As LongPtr

---------------------------------

をプロシージャ外で宣言します。

引数であるlpBufferは取得したコンピュータ名を格納するエリアとなります。また、もう一つの引数であるnSizeにはコンピュータ名の文字数を指定します。実行による戻り値には「0」と「0以外」があり、「0以外」の場合は正常終了、「0」の場合はエラーとなります。

 

使い方

Win32APIでの使用方法

Win32APIでの使用方法について説明します。 

[プログラミング例]:

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

Sub サンプル()

  '↓処理①
  Dim コンピュータ名 As String * 255

  '↓処理②
  If GetComputerName(コンピュータ名, 255) <> 0 Then
    MsgBox コンピュータ名
  Else
    MsgBox "コンピュータ名がありません。"
  End If

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによるコンピュータ名を格納する変数定義となります。予め格納する変数のサイズを指定する必要があるため、サイズを255にしてあります。

[処理②]:GetComputerNamによるコンピュータ名取得
WindowsAPI関数であるGetComputerNamを使用したコンピュータ名の取得になります。取得処理が正常に終了すると「0以外」の値が返され、正常でない場合には「0」の値が返されます。よって、戻り値が0以外の場合はコンピュータ名がMsgBoxで表示され、0の場合は”コンピュータ名がありません。”が表示されます。

f:id:m_kbou:20210509170301p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210430161357p:plain

②現在使用しているコンピュータ名「HMSLP193023」がMsgBoxで表示されます。

f:id:m_kbou:20210430161439p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

WindowsAPIを使用したコンピュータ名を取得する方法(Win32API)についての説明は以上です。

 

Win64APIでの使用方法

Win64APIでの使用方法について説明します。 

[プログラミング例]:

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

Sub サンプル()

  '↓処理①
  Dim コンピュータ名 As String * 255

  '↓処理②
  If GetComputerName(コンピュータ名, 255) <> 0 Then
    MsgBox コンピュータ名
  Else
    MsgBox "コンピュータ名がありません。"
  End If

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによるコンピュータ名を格納する変数定義となります。予め格納する変数のサイズを指定する必要があるため、サイズを255にしてあります。

[処理②]:GetComputerNamによるコンピュータ名取得
WindowsAPI関数であるGetComputerNamを使用したコンピュータ名の取得になります。取得処理が正常に終了すると「0以外」の値が返され、正常でない場合には「0」の値が返されます。よって、戻り値が0以外の場合はコンピュータ名がMsgBoxで表示され、0の場合は”コンピュータ名がありません。”が表示されます。

f:id:m_kbou:20210509170715p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210430161357p:plain

②現在使用しているコンピュータ名「HMSLP193023」がMsgBoxで表示されます。

f:id:m_kbou:20210430161439p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

WindowsAPIを使用したコンピュータ名を取得する方法(Win64API)についての説明は以上です。

 

おわりに

今回はWindowsAPI関数によるコンピュータ名の取得方法について説明しました。是非参考にして下さい。