【EXCEL VBA】Winerror.hの内容一覧を一覧表にするマクロ

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

WindowsのFormatMessage API(エラーコードから内容を引くAPI)を利用して、システムのエラーコード一覧をExcelのシートに自動出力するVBAマクロです。

エラー調査を行う際、手元にエラーコードの早見表があると非常に便利です。このマクロを実行すると、実行したPC環境に応じたエラーコード一覧表を作成できます。

前提条件

Windows環境(32bit / 64bit)のExcelで動作します。VBA7以降(64bit版Office)に対応した宣言を行っています。

サンプルコード

以下のコードをExcelの標準モジュールに貼り付けて実行してください。

Option Explicit

Public Const FORMAT_MESSAGE_ALLOCATE_BUFFER As Long = &H100
Public Const FORMAT_MESSAGE_ARGUMENT_ARRAY As Long = &H2000
Public Const FORMAT_MESSAGE_FROM_HMODULE As Long = &H800
Public Const FORMAT_MESSAGE_FROM_STRING As Long = &H400
Public Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
Public Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200
Public Const FORMAT_MESSAGE_MAX_WIDTH_MASK As Long = &HFF

#If VBA7 Then
Public Declare PtrSafe Function FormatMessage Lib "kernel32" Alias _
    "FormatMessageA" (ByVal dwFlags As Long, lpSource As Long, _
    ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
    ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) _
    As Long

Private Declare PtrSafe Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFOEX) As Long

#Else
Public Declare Function FormatMessage Lib "kernel32" Alias _
    "FormatMessageA" (ByVal dwFlags As Long, lpSource As Long, _
    ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
    ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) _
    As Long

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFOEX) As Long

#End If

Private Type OSVERSIONINFOEX
    dwOSVersionInfoSize As Long
    dwMajorVersion      As Long
    dwMinorVersion      As Long
    dwBuildNumber       As Long
    dwPlatformId        As Long
    szCSDVersion        As String * 128
End Type

Private Function GetOSVersion()
    Dim lpVerInfo As OSVERSIONINFOEX
    lpVerInfo.dwOSVersionInfoSize = Len(lpVerInfo)
    Dim Result As Long
    Result = GetVersionEx(lpVerInfo)
    If Result = 0 Then Exit Function
    
    GetOSVersion = CStr(lpVerInfo.dwMajorVersion) + "." + CStr(lpVerInfo.dwMinorVersion) + " " + CStr(lpVerInfo.dwBuildNumber)
End Function

Public Function GetErrorMessage(ByVal dwMessageId As Long) As String
    Dim dwFlags As Long    'オプションフラグ
    Dim lpBuffer As String 'メッセージを格納するバッファ
    Dim Result As Long     '戻り値(文字列のバイト数)
    
    dwFlags = FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS Or FORMAT_MESSAGE_MAX_WIDTH_MASK
    lpBuffer = String(1024, vbNullChar)
    Result = FormatMessage(dwFlags, 0&, dwMessageId, 0&, lpBuffer, Len(lpBuffer), 0&)
    If (Result > 0) Then
        lpBuffer = Left(lpBuffer, InStr(lpBuffer, vbNullChar) - 1)
    Else
        lpBuffer = ""
    End If
    
    GetErrorMessage = lpBuffer
End Function

Sub Sample()
    On Error GoTo EXCEPTION
    Dim i As Long
    Dim str As String
    Dim r As Range: Set r = Sheets("Sheet1").Range("A1")
    
    'ヘッダ行
    r.Value = "ヘキサ表示(VB用)"
    r.Offset(0, 1).Value = "ヘキサ表示"
    r.Offset(0, 2).Value = "内容(OSバージョン=" & GetOSVersion & ")"
    Set r = r.Offset(1, 0)
    
    For i = 0 To 65535
        str = GetErrorMessage(i)
        If str <> "" Then
            r.Value = "&H" & Hex(i)
            r.Offset(0, 1).Value = "0x" & Right("00000000" & Hex(i), 8)
            r.Offset(0, 2).Value = str
            Set r = r.Offset(1, 0)
            DoEvents
        End If
    Next i
        
    MsgBox "完了"
    Exit Sub
EXCEPTION:
    MsgBox Err.Description
End Sub

実行手順

  1. Excelを開き、Alt + F11 でVBE(Visual Basic Editor)を起動します。
  2. メニューの「挿入」から「標準モジュール」を追加します。
  3. 上記コードを貼り付けてウィンドウを閉じます。
  4. Excelに戻り、Alt + F8 から Sample マクロを実行します。
  5. アクティブシートの「Sheet1」の先頭からエラーコードとメッセージの一覧が書き出されます。

アウトプット例(一部)

ヘキサ表示(VB用) | ヘキサ表示 | 内容
&H0 | 0x00000000 | この操作を正しく終了しました。
&H1 | 0x00000001 | ファンクションが間違っています。
&H2 | 0x00000002 | 指定されたファイルが見つかりません。
&H3 | 0x00000003 | 指定されたパスが見つかりません。
&H4 | 0x00000004 | ファイルを開くことができません。
&H5 | 0x00000005 | アクセスが拒否されました。

この記事の更新履歴

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

2026年9月12日

  • 削除リンク切れとなっている外部ZIPファイルのダウンロードリンクを削除しました。
  • 追加Winerror.hのエラーコード一覧を取得するためのVBAサンプルコードと実行手順を本文に直接追加しました。

文書情報

記事タイトル
【EXCEL VBA】Winerror.hの内容一覧を一覧表にするマクロ
作成日
更新日
Source URL
https://papanda925.com/?p=482

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

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