1.1k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,
habe einfache Tabelle mit drei Spalten, die ich Zeilenweise in ein Array einlesen möchte, allerdings ohne Duplikate.
A B C
B G A
F G D
A B C
F J H

Im Bsp. soll also die Zeile 4 übersprungen werden. Ich dachte ich hätte die Lösung - klappt aber nicht.
Sub test1()

Dim arrWerte()
Dim lngZeile As Long
Dim lngAnz As Long
ReDim arrWerte(0 To 2, 0 To lngAnz)

Z = Cells(Rows.Count, 1).End(xlUp).Row
For lngZeile = 1 To Z

ReDim Preserve arrWerte(0 To 2, 0 To lngAnz)
If IsError(Application.Match(Cells(lngZeile, 1) & Cells(lngZeile, 2) & Cells(lngZeile, 3), arrWerte, 0)) Then
arrWerte(0, lngAnz) = Cells(lngZeile, 1)
arrWerte(1, lngAnz) = Cells(lngZeile, 2)
arrWerte(2, lngAnz) = Cells(lngZeile, 3)
lngAnz = lngAnz + 1

End If
Next
Range("B7").Resize(UBound(arrWerte(), 1) + 1, 3) = Application.Transpose(arrWerte())

End Sub


Hat jemand einen Tipp?
Gruß Andreas

4 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andreas,

benutze ein Hilfsarray:

Public Sub ArrayPruefen()
Dim arrDaten()
Dim arrTemp()
Dim varVorhanden As Variant
Dim lngZeile As Long
Dim lngZaehler As Long
ReDim arrTemp(0)
For lngZeile = 1 To Cells(Rows.Count, 1).End(xlUp).Row
varVorhanden = Application.Match(Cells(lngZeile, 1) & ";" & Cells(lngZeile, 2) _
& ";" & Cells(lngZeile, 3), arrTemp(), 0)
If Not IsNumeric(varVorhanden) Then
ReDim Preserve arrTemp(0 To lngZaehler)
ReDim Preserve arrDaten(0 To 2, 0 To lngZaehler)
arrTemp(lngZaehler) = Cells(lngZeile, 1) & ";" & Cells(lngZeile, 2) _
& ";" & Cells(lngZeile, 3)
arrDaten(0, lngZaehler) = Cells(lngZeile, 1)
arrDaten(1, lngZaehler) = Cells(lngZeile, 2)
arrDaten(2, lngZaehler) = Cells(lngZeile, 3)
lngZaehler = lngZaehler + 1
End If
Next lngZeile
Range("B7").Resize(UBound(arrTemp()) + 1, 3) = Application.Transpose(arrDaten())
End Sub


Bis später,
Karin
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Karin,
schön, nach langer Zeit wieder einmal von dir etwas zu hören!
Dein Tipp passt natürlich genau uns löst mein Problem. Gelernt habe ich auch dazu (wobei ich noch nicht verstehe, warum die Match-Funktion bei mir nicht funktioniert - liegt sicher an der Verknüpfung "&"..)
Also vielen Dank und schönen Abend!!
VG Andreas
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andreas,

das Problem ist, dass du ein mehrspaltiges Array hast, aber mittels Match (=VERGLEICH) kannst du entweder in einer einzelnen Spalte suchen oder in einer einzelnen Zeile, nicht jedoch in einer Matrix. Versuche es einfach mal mit der Tabellenfunktion VERGLEICH, indem du im Bereich A1:C5 nach dem verketteten Inhalt "A"&"B"&"C" suchst, also so:

=VERGLEICH("A"&"B"&"C";A1:C5;0)

Das Ergebnis ist #NV.

Das Hilfsarray jedoch, das die verketteten Daten beinhaltet, ist ein einspaltiges Array und dort kannst mittels Match problemlos prüfen, ob der verkettete Inhalt vorhanden ist.


Bis später,
Karin
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Karin,
alles verstanden! Nochmals DANKE!
Gruß Andreas
...