【Excel VBA】セルにUUIDを自動生成して埋める方法|Scriptlet.TypeLibが使えない場合の対処法

2025年10月07日

Excelで各行やレコードごとに固有のIDを設定したいとき、UUID(またはGUID)を自動生成する方法が非常に便利です。
この記事では、VBA(マクロ)を使ってセル範囲(例:B1~B100)に一括でUUIDを埋め込む方法を詳しく解説します。

対象読者:Excelユーザー・VBA初学者・WindowsやMacで動くUUID生成を探している方


1. UUID(GUID)とは?

UUID(Universally Unique Identifier)は、重複しない識別子を生成するための標準的なフォーマットです。
例:550e8400-e29b-41d4-a716-446655440000
Excelでは、顧客管理やデータ一意性の確保などに利用されます。


2. もっとも簡単なVBAコード:Scriptlet.TypeLibを使う方法

まずはWindows環境でよく使われる基本コードです。


Sub FillUUIDs_Scriptlet()
    Dim i As Long
    Dim uuid As String
    For i = 1 To 100
        uuid = CreateObject("Scriptlet.TypeLib").GUID
        uuid = Replace(Replace(uuid, "{", ""), "}", "")
        Range("B" & i).Value = uuid
    Next i
End Sub

上記コードをVBAエディタ(Alt + F11 → 挿入 → 標準モジュール)に貼り付け、実行するとB1~B100にUUIDが自動生成されます。

しかし、注意点があります ⚠️

このため、「エラーが発生する」「参照設定しても動かない」というケースが多発します。


3. Scriptlet.TypeLibが使えない理由

このエラーは、VBAの参照設定不足ではなく、OSレベルの問題です。
Scriptlet.TypeLibscrobj.dll というWindows内部のCOMライブラリに依存しており、以下の理由で動かない場合があります:

管理者権限があっても、以下のような再登録コマンドは推奨されません:


regsvr32 C:\Windows\System32\scrobj.dll

この方法は一部環境では動きますが、セキュリティリスクがあります。


4. 安全・確実に動く代替方法:VBAでUUIDを自作する

ここからが本題です。
外部COMに依存せず、Windows・Mac両対応のUUID生成をVBAで再現します。

(1)UUID生成関数


Function GenerateUUID() As String
    Dim i As Integer
    Dim chars As String
    Dim result As String
    
    chars = "0123456789abcdef"
    Randomize
    
    For i = 1 To 32
        result = result & Mid(chars, Int(Rnd() * 16) + 1, 1)
    Next i
    
    ' UUID形式に整形(8-4-4-4-12)
    GenerateUUID = Mid(result, 1, 8) & "-" & _
                   Mid(result, 9, 4) & "-" & _
                   Mid(result, 13, 4) & "-" & _
                   Mid(result, 17, 4) & "-" & _
                   Mid(result, 21, 12)
End Function

(2)B1~B100にUUIDを埋め込むマクロ


Sub FillUUIDs()
    Dim i As Long
    For i = 1 To 100
        Range("B" & i).Value = GenerateUUID()
    Next i
End Sub

このコードは100%VBAのみで動作し、すべてのExcel環境で問題なく実行できます。


5. 実行手順(初心者向け)

  1. Excelを開く
  2. Alt + F11 でVBAエディタを起動
  3. 「挿入」→「標準モジュール」
  4. 上記の2つのコードを貼り付ける
  5. F5キーで FillUUIDs を実行

B1~B100に異なるUUIDが自動で埋め込まれます 🎉


6. 応用:空欄セルにだけUUIDを付与する


Sub FillUUIDsIfEmpty()
    Dim c As Range
    For Each c In Range("B1:B100")
        If IsEmpty(c.Value) Then
            c.Value = GenerateUUID()
        End If
    Next c
End Sub

このバージョンは「すでに値があるセルを上書きしない」仕様です。
新規データの追加時などに便利です。


7. UUIDのバージョン4仕様に近づける(上級者向け)

正確なUUID v4仕様では、特定のビットを固定して「ランダム性と構造性」を両立します。
以下はそれに近い構造を再現したサンプルです:


Function GenerateUUIDv4() As String
    Dim i As Integer, bytes(15) As Byte
    Dim hexstr As String
    
    Randomize
    For i = 0 To 15
        bytes(i) = Int(Rnd() * 256)
    Next i
    
    ' Version(13-16ビット目を0100固定)
    bytes(6) = (bytes(6) And &H0F) Or &H40
    ' Variant(17-20ビット目を10xx固定)
    bytes(8) = (bytes(8) And &H3F) Or &H80
    
    For i = 0 To 15
        hexstr = hexstr & Right("0" & Hex(bytes(i)), 2)
    Next i
    
    GenerateUUIDv4 = LCase(Mid(hexstr, 1, 8) & "-" & _
                            Mid(hexstr, 9, 4) & "-" & _
                            Mid(hexstr, 13, 4) & "-" & _
                            Mid(hexstr, 17, 4) & "-" & _
                            Mid(hexstr, 21, 12))
End Function

この方法なら、UUID v4の構造的ルールにも準拠します。


8. まとめ


WinUI 3 / XAML の Grid.Width 設定方法

WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】

MenuFlyoutWinUI 3 で便利なポップアップメニュー

WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い

PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術

Microsoft Storeアプリ更新時のロールアウト設定まとめ

PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Microsoft Authenticatorのオートフィル機能が2025年7月に終了

RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて

PowerShellでGrapheme Clusterについて処理を考える

業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法

【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法

【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き

【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入

Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】

macOSでドメイン名から情報を取得する方法【初心者向け】

【Excel VBA】セルにUUIDを自動生成して埋める方法

Homebrewの「update」と「upgrade」の違い+バージョン確認方法|Macのパッケージ管理