VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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)

のように、レコードセットを使って管理する手法をとるかも。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -