【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が自動生成されます。
しかし、注意点があります ⚠️
Scriptlet.TypeLibはWindows専用のCOMコンポーネントです。- 64bit版Excelや一部のセキュリティ制限環境では動作しません。
- Mac版Excelには存在しません。
このため、「エラーが発生する」「参照設定しても動かない」というケースが多発します。
3. Scriptlet.TypeLibが使えない理由
このエラーは、VBAの参照設定不足ではなく、OSレベルの問題です。
Scriptlet.TypeLib は scrobj.dll というWindows内部のCOMライブラリに依存しており、以下の理由で動かない場合があります:
- 企業PCやセキュリティ制限でCOM呼び出しが禁止されている
- 64bit版Officeでは登録がない
- Mac版Excelではそもそも非対応
管理者権限があっても、以下のような再登録コマンドは推奨されません:
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. 実行手順(初心者向け)
- Excelを開く
Alt + F11でVBAエディタを起動- 「挿入」→「標準モジュール」
- 上記の2つのコードを貼り付ける
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. まとめ
- Scriptlet.TypeLib はWindows専用であり、参照設定では有効化できない。
- VBA単体の関数でUUIDを自作すれば、全環境で動作する。
- 空欄判定・v4対応など、柔軟な拡張も可能。
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 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・コマンドプロンプト】