Excel VBA 逆引き集 | ハッシュ化

Excel VBA
スポンサーリンク

ハッシュ化(文字列を一意の値に変換)

Excel VBAで「ハッシュ化」とは、文字列やデータを 一意の数値や文字列に変換する処理 のことです。
パスワードの保存やデータの照合、重複チェックなどに使われます。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • ハッシュ化とは?
    入力データを一定のアルゴリズムで「固定長の値」に変換すること。
  • 用途:
    • パスワードを直接保存せず、ハッシュ値で管理。
    • データの改ざんチェック。
    • 重複判定(同じ文字列なら同じハッシュ値)。
  • 注意:
    • VBA標準にはハッシュ関数はない。
    • Windowsの暗号化APIや簡易的な自作関数を利用する。

テンプレ1:簡易ハッシュ(文字コードの合計)

初心者向けに「文字コードの合計」をハッシュ値として使う簡易例です。

Function SimpleHash(text As String) As Long
    Dim i As Long, sumVal As Long
    For i = 1 To Len(text)
        sumVal = sumVal + Asc(Mid(text, i, 1))
    Next i
    SimpleHash = sumVal
End Function

Sub Example_SimpleHash()
    Dim s As String: s = "ABC"
    MsgBox "文字列=" & s & vbCrLf & "ハッシュ値=" & SimpleHash(s)
End Sub
VB
  • 結果: "ABC"198(65+66+67)
  • ポイント: 簡易的なので衝突(異なる文字列が同じ値になる)が起こりやすい。

テンプレ2:MD5ハッシュ(Windows API利用)

より本格的に「MD5」などの暗号学的ハッシュを使う場合は、Windowsの暗号化APIを利用します。
以下は簡易的なMD5ハッシュ取得例です。

' 参照設定で「Microsoft XML, v6.0」を有効にする
Function MD5Hash(text As String) As String
    Dim enc As Object, bytes() As Byte, hash As Object
    Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    bytes = StrConv(text, vbFromUnicode)
    hash = enc.ComputeHash_2(bytes)

    Dim i As Long, result As String
    For i = 1 To LenB(hash)
        result = result & LCase(Right("0" & Hex(AscB(MidB(hash, i, 1))), 2))
    Next i
    MD5Hash = result
End Function

Sub Example_MD5()
    Dim s As String: s = "password123"
    MsgBox "文字列=" & s & vbCrLf & "MD5ハッシュ=" & MD5Hash(s)
End Sub
VB
  • 結果例: "password123"482c811da5d5b4bc6d497ffa98491e38
  • ポイント: MD5は高速だがセキュリティ用途には弱い。

テンプレ3:SHA1ハッシュ(XMLオブジェクト利用)

Function SHA1Hash(text As String) As String
    Dim xml As Object, bytes() As Byte
    Set xml = CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
    bytes = StrConv(text, vbFromUnicode)
    Dim hash As Object: Set hash = xml.ComputeHash_2(bytes)

    Dim i As Long, result As String
    For i = 1 To LenB(hash)
        result = result & LCase(Right("0" & Hex(AscB(MidB(hash, i, 1))), 2))
    Next i
    SHA1Hash = result
End Function

Sub Example_SHA1()
    Dim s As String: s = "hello"
    MsgBox "文字列=" & s & vbCrLf & "SHA1ハッシュ=" & SHA1Hash(s)
End Sub
VB
  • 結果例: "hello"aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

テンプレ4:ハッシュ化で重複チェック

Sub Hash_DuplicateCheck()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim data As Variant
    data = Array("apple", "banana", "apple", "orange")

    Dim s As Variant, h As String
    For Each s In data
        h = MD5Hash(s)
        If dict.Exists(h) Then
            Debug.Print s & " は重複"
        Else
            dict(h) = True
        End If
    Next s
End Sub
VB
  • ポイント: ハッシュ値をキーにすれば高速に重複チェック可能。

例題で練習

'例1:簡易ハッシュ
Sub Example1()
    Example_SimpleHash
End Sub

'例2:MD5ハッシュ
Sub Example2()
    Example_MD5
End Sub

'例3:SHA1ハッシュ
Sub Example3()
    Example_SHA1
End Sub

'例4:重複チェック
Sub Example4()
    Hash_DuplicateCheck
End Sub
VB

初心者向けポイント

  • 簡易ハッシュは練習用 → 実務ではMD5やSHAを使う。
  • MD5/SHAは暗号学的ハッシュ → 同じ文字列なら必ず同じ値になる。
  • Dictionaryと組み合わせると便利 → 重複チェックやデータ照合に最適。
  • セキュリティ用途ではSHA2以上推奨 → MD5やSHA1は古い。

👉 この「ハッシュ化テンプレ」を覚えておけば、Excel VBAで データの一意化・重複チェック・簡易的なセキュリティ処理 を実務に応用できます。

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