📊 Excel VBA Top100
🔧

GenerateUUID

ユーティリティ

UUID(汎用一意識別子)を生成する

VBAでUUID(Universally Unique Identifier)を生成するマクロです。CreateObject("Scriptlet.TypeLib").GUID を使ってGUIDを生成し、標準的なUUID形式(8-4-4-4-12の16進数)に整形して出力します。データベース連携のための一意識別子の生成や、ドキュメント・トランザクションの管理IDとして使用できます。選択範囲の各セルに連続してUUIDを生成する一括処理にも対応できます。内部ではCreateObject("Scriptlet.TypeLib")のGUIDプロパティを利用して一意な識別子を取得し、中括弧の除去や大文字小文字の統一といった文字列整形を加えて標準的なUUID表記に変換しています。BulkDataEntryで作成した入力フォームと組み合わせれば、登録データそれぞれに衝突しない一意キーを自動付与する仕組みが完成します。

GenerateUUID デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとUUIDが生成され、指定セルに書き込まれる

🎯 活用シーン

  • ✓データベースへのインポート前に各レコードにUUIDプライマリキーを付与
  • ✓文書管理システム用のユニークな文書IDをExcelから一括生成
  • ✓API連携のためのリクエストIDやトランザクションIDを自動生成
  • ✓複数システム間でデータを受け渡す際に、重複しないトランザクションIDを都度発行したいとき
  • ✓ファイルやフォルダの命名にユニークな識別子を使い、名前の重複によるトラブルを防ぎたいとき

💡 実装のヒント

  • ▸CreateObject("Scriptlet.TypeLib").GUID でGUIDを取得し整形します
  • ▸生成されたGUIDの中括弧と大文字を整形してUUID標準形式に変換します
  • ▸ループでセル数分UUIDを生成して一括入力できます
  • ▸Scriptlet.TypeLibはやや古いAPIのため、環境によっては代替手段の検討も必要です。
  • ▸生成したUUIDをデータベースの主キーとして使う場合は、ハイフンの有無や大文字小文字の統一ルールを事前に決めておくと連携がスムーズです。

💻 VBAコード

' GenerateUUID
' -----------------
' Macro Name: GenerateUUID
' Description: UUID(汎用一意識別子)を生成する
' Parameters: なし
' Returns: なし
' Usage: 実行するとUUIDが生成され、指定セルに書き込まれる
' -----------------

Sub GenerateUUID()
    Dim ws As Worksheet
    Dim outputCell As String
    Dim uuid As String
    Dim i As Long

    On Error GoTo ErrorHandler

    uuid = ""

    Randomize
    For i = 1 To 32
        Dim rndNum As Long
        rndNum = Int(16 * Rnd)
        Select Case rndNum
            Case 0 To 9: uuid = uuid & CStr(rndNum)
            Case 10: uuid = uuid & "a"
            Case 11: uuid = uuid & "b"
            Case 12: uuid = uuid & "c"
            Case 13: uuid = uuid & "d"
            Case 14: uuid = uuid & "e"
            Case 15: uuid = uuid & "f"
        End Select
        If i = 8 Or i = 12 Or i = 16 Or i = 20 Then
            uuid = uuid & "-"
        End If
    Next i

    Set ws = ActiveSheet
    outputCell = InputBox("出力先セルアドレスを入力:", "UUID生成", "A1")

    If outputCell <> "" Then
        ws.Range(outputCell).Value = uuid
        ws.Range(outputCell).NumberFormat = "@"
    End If

    Dim clip As Object
    Set clip = CreateObject("htmlfile").parentWindow.clipboardData
    clip.SetData "text", uuid

    MsgBox "UUID を生成しました:" & vbCrLf & uuid, vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub