下記のようなListViewの表で、例えば項目1のtest2の場所を
探してIndexを取得したいのですが、方法はありませんか?
項目0 項目1 項目2
AAAA test1 DDDD
BBBB test2 EEEE
CCCC test3 FFFF
色々探してみたのですが、分かりませんでした。
よろしくお願いします。
単純だがこんな方法はいかが?
Private Sub Command1_Click()
MsgBox サブアイテムを検索("text2")
End Sub
Function サブアイテムを検索(data As String) As Integer
Dim i As Integer
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems.Item(i).SubItems(1) = data Then
サブアイテムを検索 = i
Exit Function
End If
Next
サブアイテムを検索 = 0
End Function
たちイチローさん、ありがとうございます。
その方法も考えたのです。説明不足ですみませんでした。
lisiview内のデータ数が10000件くらいあり、
5000件くらいのデータを既登録なデータではないか
検索しつつlistviewに登録しようとしています。
(既登録であれば登録しません)
常に全データを見てると時間が掛かりすぎてしまうと思い
他に方法が無いか検討していました。
現在はハッシュ法を使って、独自にテーブルを作って
ハッシュっぽいことをして既登録かどうかをチェックしています。
このテーブルを作成するのに500件くらいのデータで
10秒くらいかかってしまいます。
なので、このテーブルを作らずにlistviewで高速な検索方法が
ないかと思いまして質問致しました。
私も数万件ほどのデータに対し似たような処理を作ったことがありますが、
そんなに重い処理にはなりませんでした。
5万件でも1秒に満たなかったです。
※もちろん、マシンスペックにもよるでしょうが・・・
>現在はハッシュ法を使って、独自にテーブルを作って
>ハッシュっぽいことをして既登録かどうかをチェックしています。
>このテーブルを作成するのに500件くらいのデータで
>10秒くらいかかってしまいます。
自作ハッシュでなくScripting.Dictionary使うとか・・・
たちイエローさん Sayさんありがとうございます。
(たちイエローさん名前間違えてすみません)
自作ハッシュが悪さしているのかもしれないですね・・
普通にたちイエローさんが書いて下さった方法でも
試してみます。
ScriptingDictionaryというのはまだ使ったことがないので、
これから調べてみます。
もう少しやってみてから結果報告したいと思います。
ありがとうございました。
自作ハッシュ無しで普通にListViewを作成しても処理時間が
かかり変だなと思ったらループの中にいれていたSleepが
悪さをしていました。
読み込みとListView作成に時間がかかるものと思いこみ
Sleppを入れていたのが、遅い原因でありました。
助言を頂いた皆様、お手数をおかけして申し訳ありませんでした。
これにて、解決とさせて頂きます。
続けてScriptDictionaryも試してみます。
ありがとうございました。
ツイート | ![]() |