VBAでUUIDを生成

Excel VBAでUUID(GUID)を生成して使っている部分があったのだが、 先日のWindows Updateを適用してから、 CreateObject("Scriptlet.TypeLib")でエラーが出て使用できなくなってしまった。

参考 : 2017 年 7 月のセキュリティ更新適用後、VBA から一部のオブジェクトを作成できません

私の場合はただ単にランダムなUUIDが生成できれば良いので、 UUID v4を生成する関数を作った。

VBの乱数の精度としては24ビットらしいので、1回の乱数生成では最大16ビット使用するようにはしている。 とはいえ乱数の品質としてはあまり高くないのでご注意を。

Public Function GetUUID() As String
    'GetUUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36)
    GetUUID = Right$("0000" & Hex(Rnd() * 65536), 4) & Right$("0000" & Hex(Rnd() * 65536), 4)
    GetUUID = GetUUID & "-" & Right$("0000" & Hex(Rnd() * 65536), 4)
    GetUUID = GetUUID & "-4" & Right$("0000" & Hex(Rnd() * 65536), 3)
    GetUUID = GetUUID & "-" & Right$("0000" & Hex(32768 + Rnd() * 16384), 4)
    GetUUID = GetUUID & "-" & Right$("0000" & Hex(Rnd() * 65536), 4) & Right$("0000" & Hex(Rnd() * 65536), 4) & Right$("0000" & Hex(Rnd() * 65536), 4)
End Function