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