[VBA] Arrays vergleichen - Unterschied ausgeben
#11
zu
Zitat:Sauber laufen natürlich alle Vorschläge welche wir hier hinterlassen haben.

Nein bzw nur solange ein Name nicht auch gleich einem Teil eines längeren Namens ist.

Sauber läuft dann nur snb's Vorschlag aus #7.
Wobei nicht gefordert war, dass bei falscher Schreibweise in der zweiten Liste beide Schreibweisen ausgegeben werden. Daher würde ich in den Schleifen die Listen vertauschen und in der zweiten Schleife den Else-Zweig entfernen.


Angehängte Dateien
.xlsm   Array-Vergleich.xlsm (Größe: 17,21 KB / Downloads: 1)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#12
@ Ego

ja das war zwar so nicht gefragt, aber mit direktem Vergleich vorhandene Werte (Namensvorgaben) löschen und anschließend nur übrig gebliebene Werte ins Ausgabearray schreiben ist dabei sogar etwas schneller wie die Suche im String.
Der Weg wäre dann so:
Code:
Sub AbgleichFehlendeBbl()
    Dim arrListAuschluss(), arrTabVgl(), arrTabAus(), i&, j&
    With Tabelle1
        arrTabVgl = Application.WorksheetFunction.Transpose(.Range("B3:B" & .Cells(Rows.Count, 2).End(xlUp).Row).Value)
        arrListAuschluss = Application.WorksheetFunction.Transpose(.Range("E3:E" & .Cells(Rows.Count, 5).End(xlUp).Row).Value)
        For i = 1 To UBound(arrListAuschluss)
            For j = 1 To UBound(arrTabVgl)
                If arrListAuschluss(i) = arrTabVgl(j) Then
                    arrTabVgl(j) = ""
                End If
            Next j
        Next i
        j = 0
        For i = 1 To UBound(arrTabVgl)
            If arrTabVgl(i) <> "" 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
Gruß Uwe
Antworten Top
#13
Hallo Egon, EasY,

A) zu
Zitat:... ist dabei sogar etwas schneller wie ...


wenn ihr in Zukunft auch für große Datenmengen programmieren wollt, solltet ihr euch mit der Idee hinter dem Datenobjekt Dictionary beschäftigen.

Bei der Lösung über geschachtelte Schleifen wächst die Rechenzeit exponentiell über die Länge der Listen, bei Dictionarys linear. Wenn sich die Länge der Namenslisten um den Faktor 100 ändert gilt für die Rechenzeit über geschachtelte Schleifen der Faktor 10.000 und über Dictionary der Faktor 100.

Ohne Dictionaries wär ein Internet wie wir es kennen nicht vorstellbar.

B)
Ein weitere Vorteil von Dictionaries ist die häufig einfachere Struktur des Programms. SNB's Programm ist, sebst wenn die Variablennamen länger wären, sehr viel einfacher als Egon's letzte Version. Daher nutze ich das Dictionary auch bei kleinen Datenmengen.

C)
Wenn ihr euch über die Nutzung von Dictionaries in VBA informieren wollt, gibt es hier eine interessante Seite Blush :

https://www.snb-vba.eu/VBA_Dictionary_en.html

aber auch hier:

https://excelmacromastery.com/vba-dictionary/
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • EasY
Antworten Top
#14
(20.03.2023, 15:31)Ego schrieb: wenn ihr in Zukunft auch für große Datenmengen programmieren wollt, solltet ihr euch mit der Idee hinter dem Datenobjekt Dictionary beschäftigen.
Dictionaries aus der Scripting-Bibliothek brechen allerdings in der Performance ein, sobald eine Grenze von ca. 125-150k Datensätzen überschritten wird. Da müssen dann irgendwann andere Lösungen ran, z. B. Dictionaries aus anderen Quellen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste