2011-12-16 17 views
0

私はGUIDを生成するためにExcelで使用する以下のVB Scrtipを持っています。理想的には、ランダムに作成されるのではなく、作成された日付時刻に基づくGUIDが必要です。とにかくこのスクリプトを修正して、日付と時刻に基づいてGUIDを作成しますか?VBスクリプトは、日付の時刻に基づいてguidを作成する

Private Type GUID 
Data1 As Long 
Data2 As Long 
Data3 As Long 
Data4(8) As Byte 
Private Declare Function CoCreateGuid _ 
Lib "ole32.dll" _ 
(ByRef pGUID As GUID) As Long 

Private Declare Function StringFromGUID2 _ 
Lib "ole32.dll" _ 
(ByRef rGUID As Any, _ 
ByVal lpstrCLSID As Long, _ 
ByVal cbMax As Long) As Long 

Function CreateGUID() As String 

Dim b() As Byte 
Dim BuffSize As Long 
Dim RetVal As Long 
Dim MyGUID As GUID 
BuffSize = 40 
ReDim b(BuffSize * 2) As Byte 
RetVal = CoCreateGuid(MyGUID) 
RetVal = StringFromGUID2(MyGUID, VarPtr(b(0)), BuffSize) 
CreateGUID = Left$(b, RetVal - 1) 
End Function 

感謝

+0

あなたは正確に何ですか? data4の最後の部分をタイムスタンプでスワップするGUID実装があり、シーケンシャルGUIDがあります。なぜそれらが自然なランダム性の状態にならないようにする必要がありますか? –

+0

私はそれがCombGuidでできることを知っています。しかし、VBSを使って方法を理解することはできません。インデックスの断片化を避けるために、このCombGuid形式を使用することをお勧めします。再度、感謝します。 – Ross

+0

これをvbs/vbaまたはvb6(例として)に入れたいのですが、インデックス作成ではSQL Serverを使用していますか? –

答えて

0

GUIDは、通常、他のデータのうち、日付/時刻のコンポーネントを、持っています。それらをGUIDにしたくない場合は、必要な文字列を作成できますが、特に実際のGUIDを使用して、衝突を回避する独自の方法を考え出す必要があります。

+0

GUIDがtipe/dateに関連していたことは本当にわかりませんでした... MACアドレスに関連しているだけではありませんか?または私は何かを混乱させるのですか? –

+1

これらは[バージョン](http://en.wikipedia.org/wiki/Guid#Algorithm)に応じていくつかの部分で構成されていますが、元の仕様ではMACアドレスが使用されていました。 – Deanna

関連する問題