14

次の値があり、これらをコレクションに追加したいと考えています。値が既にコレクションにある場合は、「これはコレクションに既に追加されています」というメッセージが表示されます。

Dim OrdLines As New Collection

OrdLines.Add (111,this is first item)

OrdLines.Add (222,this is second item)

OrdLines.Add (333,this is third item)

OrdLines.Add (444,this is fourth item)

コレクション内で値が重複しないようにするにはどうすればよいですか?

4

4 に答える 4

17

重複を避けるにwithout any promptsは、この方法を使用します。

コード

Sub Sample()
    Dim col As New Collection
    Dim itm

    On Error Resume Next
    col.Add 111, Cstr(111)
    col.Add 222, Cstr(222)
    col.Add 111, Cstr(111)
    col.Add 111, Cstr(111)
    col.Add 333, Cstr(333)
    col.Add 111, Cstr(111)
    col.Add 444, Cstr(444)
    col.Add 555, Cstr(555)
    On Error GoTo 0

    For Each itm In col
        Debug.Print itm
    Next
End Sub

スクリーンショット

ここに画像の説明を入力

説明

コレクションは、1 つの単位として参照できる項目の順序付けられたセットです。構文は次のとおりです。

col.Add item, key, before, after

コレクションは同じキーを 2 回持つことはできないため、追加するアイテムを使用してキーを作成しています。これにより、重複が発生しないことが保証されます。これOn Error Resume Nextは、重複を追加しようとしたときに発生するエラーを無視して、追加する次の項目に進むようにコードに指示しているだけです。上記のCHR(34)ステートメント"は、次のようにも記述できます。

col.Add 111, """" & 111 & """"

おすすめの読み物

Visual Basic コレクション オブジェクト

HTH

于 2013-09-14T09:10:29.897 に答える
-1

常に値を割り当てていると仮定して、重複をチェックできる組み込みメソッドがあります。これは、よりも好ましいです。KeyOn Error Resume Next

If Not OrdLines.Contains(key_value) Then
    OrdLines.Add(item_value, key_value, before, after)
End If

これは VB.NET であり、VBA/VB6 ではありません。VBA/VB6では、ここで与えられたアプローチに似たカスタム関数を作成できます。

于 2013-09-14T13:40:28.803 に答える