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へ修正しました。
