投稿日 | : 2005/07/01(Fri) 11:41 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: 配列中から配列の番号を検索する |
> 対応文字列 > コード番号
> の処理を高速に行なう方法をご教授願います。
私なら、たとえば
Set Dict = CreateObject("Scripting.Dictionary")
Dict("あああ") = 0
Dict("ああい") = 1
Dict("ああう") = 2
Dict("ああお") = 3
Dict("んんん") = 9999
Key = "ああう"
If Dict.Exists(Key) Then
MsgBox Dict(Key)
Else
MsgBox "未登録:" & Key
End If
のような、逆引き用の Dictionary を用意するか、または、配列を使わず、
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
RS.Fields.Append "Name", adVarWChar, 30
RS.Fields.Append "Index", adInteger
RS.Open
RS.Fields("Name").Properties("OPTIMIZE").Value = True
RS.Fields("Index").Properties("OPTIMIZE").Value = True
RS.AddNew Array("Name", "Index"), Array("あああ", 0)
RS.AddNew Array("Name", "Index"), Array("ああい", 1)
RS.AddNew Array("Name", "Index"), Array("ああう", 2)
RS.AddNew Array("Name", "Index"), Array("ああお", 3)
RS.AddNew Array("Name", "Index"), Array("べんし", 9999)
RS.AddNew Array("Name", "Index"), Array("んんん", 9999)
Key = "ああお"
RS.Filter = "Name='" & Key & "'"
If RS.EOF Then
MsgBox "未登録:" & Key
Else
MsgBox RS.Collect("Index")
End If
RS.Filter = adFilterNone
Index = 9999
RS.Filter = "Index=" & CStr(Index)
S = ""
Do Until RS.EOF
S = S & vbCrLf & "[" & RS.Fields("Name").Value & "]"
RS.MoveNext
Loop
RS.Filter = adFilterNone
MsgBox Mid(S, 3)
のように、レコードセットを使って管理する手法をとるかも。