コレクションを実際に作成したい場合(たとえば、アイテムを最初に表示する順序でアイテムを保持したい場合など)、コレクションを構築する際に一時的なデータ構造として辞書を使用することをお勧めします。
Sub test()
Dim Materials As Variant, C As Collection, v As Variant
Materials = Array(2, 3, 5, 2, 6, 5, 7, 4, 2)
Set C = Uniques(Materials)
For Each v In C
Debug.Print v
Next v
End Sub
出力::のようにテストされた
Function Uniques(A As Variant) As Collection
Dim D As Object, C As New Collection
Set D = CreateObject("Scripting.Dictionary")
Dim v As Variant
For Each v In A
If Not D.exists(v) Then
D.Add v, 1
C.Add v
End If
Next v
Set Uniques = C
End Function
:ような何か
2
3
5
6
7
4
あなたが望むすべてがセットのようなオブジェクトではなく、それ自体はコレクションである場合、あなたはスキップすることができコレクションは完全にUniques()
(適切に修正されている)が辞書自体を返すだけです。
「a」にはどのような値が格納されていますか?コレクションのキー値が文字列でなければならないので、 'a'が数字の場合は型不一致が発生しますが、' On Error Resume Next'はそれを隠します。 'Unique.Add a、CSTR(a)'を試してください。しかし、あなたが投稿したコードは実際に問題をテストするのを困難にする 'Materials'に値を割り当てません(私が知っているすべてのフォームコントロールをMaterialsに割り当てることができます)。 –
初心者がよく知っているはずの人がコードで 'On Error Resume Next'を見ると、初心者がそれらをコピーします。それは、エラーがある場合、私に教えてもらうことを気にしないでください。それを削除し、エラーメッセージが表示されるかどうかを確認してください。 –
定義されているように、「材料」は変形です。 'Materials = Array(x、y、z)'のように配列を配置することができます。あなたは? –