プロが教えるわが家の防犯対策術!

リストボックスの選択から重複しないリストボックスに値を抽出する
コードを作成しました。
しかし、スペックの低いPCで動作させると、処理に時間が
かかってしまいます。

配列を使うと処理が早くなるとウェブで調べたのですが、
いまいち理解が出来ません。

やりたいこと
・配列にリストボックスの値を入れる
・配列から重複を削除する?

どなたかご教授ください。

コードは下記のようになっています。

   If Not UserForm1.ListBox6.Value = 0 Then
     For w = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
If Not UserForm1.ListBox6.Value = _
UserForm1.ListBox1.List(w, 5) Then
UserForm1.ListBox1.RemoveItem (w)
End If
Next w
   End If

For w = UserForm1.ListBox1.ListCount - 1 To 1 Step -1
If UserForm1.ListBox1.List(w - 1, 6) = UserForm1.ListBox1.List(w, 6) Then
UserForm1.ListBox1.RemoveItem (w)
End If
Next w

A 回答 (2件)

私は重複しないリストを作る際には、Dictionaryオブジェクトを使ってます。



Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
【重複しないリストを生成する】

ご参考まで。
    • good
    • 0

こんばんは。



UserFormモジュールに以下のようなユーザー定義関数を入れてあげればよいのでは?直接のコードではありませんが、サンプルを参考にしてください。

Dim v As Variant
Dim i As Long
For i = Me.ListBox1.ListCount - 1 To 1 Step -1
 If mCountIf(Me.ListBox1.List, Me.ListBox1.List(i)) > 1 Then
  Me.ListBox1.RemoveItem i
 End If
Next i


Function mCountIf(arg1, arg2)
  Dim v As Variant
  Dim i As Long
  If Not IsArray(arg1) Then
    mCountIf = 0
    Exit Function
  End If
  For Each v In arg1
    If StrComp(v, arg2, 1) = 0 Then
      i = i + 1
    End If
  Next v
  mCountIf = i
End Function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!