【VBA】【Excel(64bit)】WinSockの起動(WSAStartup) と終了(WSACleanup)サンプル

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office
Option Explicit

Private Const WSA_DESCRIPTIONLEN As Long = 256
Private Const WSA_DESCRIPTIONSIZE As Long = WSA_DESCRIPTIONLEN + 1
Private Const WSA_SYS_STATUS_LEN As Long = 128
Private Const WSA_SYSSTATUSSIZE As Long = WSA_SYS_STATUS_LEN + 1

Public Type WSAData
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * WSA_DESCRIPTIONSIZE
    szSystemStatus As String * WSA_SYSSTATUSSIZE
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As Long
End Type

Private Declare PtrSafe Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequested As Integer, ByRef lpWSAData As WSAData) As Long
Private Declare PtrSafe Function WSACleanup Lib "ws2_32.dll" () As Long

Sub test()
  Dim RetCode As Long
  Dim WSAData As WSAData
  
  'スタートアップ
  RetCode = WSAStartup(MAKEWORD(2, 2), WSAData)
  
  '参考:https://learn.microsoft.com/ja-jp/windows/win32/api/winsock2/ns-winsock2-wsadata
  Debug.Print "RetCode = " & RetCode
  Debug.Print "wVersion = " & WSAData.wVersion
  Debug.Print "wHighVersion = " & WSAData.wHighVersion
  Debug.Print "szDescription = " & WSAData.szDescription
  Debug.Print "szSystemStatus = " & WSAData.szSystemStatus
  Debug.Print "iMaxSockets(Windows ソケット バージョン 2 以降では無視) = " & WSAData.iMaxSockets
  Debug.Print "iMaxUdpDg(Windows ソケット バージョン 2 以降では無視) = " & WSAData.iMaxUdpDg
  Debug.Print "lpVendorInfo(Windows ソケット バージョン 2 以降では無視) = " & WSAData.lpVendorInfo

  'クリーンアップ
  RetCode = WSACleanup()
End Sub

'VCにあるMAKEWORDマクロと等価ロジック
Private Function MAKEWORD(ByVal LoByte As Byte, ByVal HiByte As Byte) As Integer
  If HiByte And &H80 Then
    MAKEWORD = ((HiByte * &H100&) + LoByte) Or &HFFFF0000
  Else
    MAKEWORD = (HiByte * &H100) + LoByte
  End If
End Function

過去のブログで公開していたWinsockを使ったソケット通信プログラムの切り出し。

まずは復習として、Excel VBA (64bit) 環境における Winsock の起動(WSAStartup)と終了(WSACleanup)の手順を確認する。

Excel VBA でソケットを使った並列処理ができないかというアイデアから、久々にWinsockを使おうと思い立ち復習を開始した。

無事に起動・終了処理ができることを確認できたので、次は UDP 通信にチャレンジしてみよう。

参考:【EXCEL】【VBA】Application.OnTimeを利用し指定時間経過後にサブプロセスを実行する例

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更デバッグ出力部分の変数タイポ(reRetCodet)および未定義変数(ret)の代入先を修正しました。
  • 変更WSACleanup関数のインポート元DLLをwsock32.dllから正しいws2_32.dllへ修正しました。

文書情報

記事タイトル
【VBA】【Excel(64bit)】WinSockの起動(WSAStartup) と終了(WSACleanup)サンプル
作成日
更新日
Source URL
https://papanda925.com/?p=1480

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました