ich google schon seit einer Weile, finde allerdings keine Lösung zu meinem Problem bzw. keinen Ansatz, welchen ich verstehe :) :
Ich habe ein 1-Dimensionales Array, welches die Gesamtliste aller Mitarbeiter (Namen) darstellt. Nun will ich ein weiteres 1-Dimensionales Array mit Namen "dagegenlaufen" lassen.
In einem dritten Array sollen nun alle Namen aufgelistet werden, die nicht in beiden Listen aufgeführt sind. Dieses Array soll später dann in eine Userform überführt werden (das soll hier aber nicht thematisiert werden, das möchte ich selber erarbeiten :) )
Wäre super, wenn ihr mir da helfen könntet. Ich bin was Arrays angeht noch sehr am Anfang, habe sie aufgrund der Geschwindigkeit allerdings lieben gelernt.
Danke für die prompte Antwort, allerdings habe ich vergessen zu erwähnen, dass ich die Tabelle auf der Arbeit benötige und da leider nur Office 2016 vorhanden ist
Sub AbgleichFehlende() Dim arrTabIn(), arrListAll(), arrTabVgl(), arrTabAus(), varListAll$, i&, j& With Tabelle1 arrTabVgl = .Range("B3:B12").Value arrTabIn = .Range("E3:E5").Value For i = 1 To UBound(arrTabIn) ReDim Preserve arrListAll(0 To i - 1) arrListAll(i - 1) = arrTabIn(i, 1) Next i varListAll = Join(arrListAll, "~") For i = 1 To UBound(arrTabVgl) If InStr(1, varListAll, arrTabVgl(i, 1)) = 0 Then j = j + 1 ReDim Preserve arrTabAus(1 To j) arrTabAus(j) = arrTabVgl(i, 1) End If Next i .Cells(3, 8).Resize(j) = Application.WorksheetFunction.Transpose(arrTabAus()) End With End Sub
18.03.2023, 13:21 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2023, 13:29 von snb.)
Code:
Sub M_snb() For Each it In Cells(3, 5).CurrentRegion Columns(2).Replace it, "" Next End Sub
oder
Code:
Sub M_snb() sn = Cells(3, 5).CurrentRegion sp = Cells(3, 2).CurrentRegion
With CreateObject("scripting.dictionary") For j = 1 To UBound(sn) x0 = .Item(sn(j, 1)) Next For j = 1 To UBound(sp) If .exists(sp(j, 1)) Then .Remove sp(j, 1) Else x0 = .Item(sp(j, 1)) End If Next
19.03.2023, 09:16 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2023, 09:40 von Egon12.)
Hallo,
ich gebe auch noch mal meinen Dreier zum angefragten Weg es via 1-dimensionale Arrays zu erledigen dazu. Ein möglicher Weg wäre so:
Code:
Option Explicit
Sub AbgleichFehlende() Dim arrListAll(), arrTabVgl(), arrTabAus(), varListAll$, i&, j& With Tabelle1 arrTabVgl = Application.WorksheetFunction.Transpose(.Range("B3:B" & .Cells(Rows.Count, 2).End(xlUp).Row).Value) arrListAll = Application.WorksheetFunction.Transpose(.Range("E3:E" & .Cells(Rows.Count, 5).End(xlUp).Row).Value) varListAll = Join(arrListAll, "~") For i = 1 To UBound(arrTabVgl) If InStr(1, varListAll, arrTabVgl(i)) = 0 Then j = j + 1 ReDim Preserve arrTabAus(1 To j) arrTabAus(j) = arrTabVgl(i) End If Next i .Cells(3, 8).Resize(UBound(arrTabAus)) = Application.WorksheetFunction.Transpose(arrTabAus()) End With End Sub
Deine letzte Version ist zwar kürzer, aber dafür ist meine letzte Version effizienter und schneller. Sauber laufen natürlich alle Vorschläge welche wir hier hinterlassen haben.