Tabellen vergleichen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Tabellen vergleichen

    Hallo,
    ich habe folgendes Problem.

    ich habe ein sehr lange If-Schleife, die 2 Tabellen miteinander vergleichen soll .
    Nur haben meine Tabellen nicht nur 3 Spalten sonder 24 und wenn ich die If-Schleife so weiter führe, wie bisher, kann ich maximal bis zur 10 zeile iterrieren, dann springt der Cusor
    in die nächste und es wird mir ein Fehler angezeigt.

    Weiß jemand einer adere Möglichkeit als 2 Tabellen durch eine If-Schleife zu vergleichen.

    Wäre Super :)

    Grüße Nicole


    Public Sub Pivot()

    Dim haupt As Worksheet 'Ziel
    Dim angebot As Worksheet 'Quelle

    Set haupt = Worksheets("Haupttabelle")
    Set angebot = Worksheets("Angebotsliste")

    Dim zeileQuelle As Integer
    Dim zeileZiel As Integer
    Dim spalteQuelle As Integer
    Dim spalteZiel As Integer
    Dim counter As Integer

    zeileQuelle = 4
    zeileZiel = 3
    spalteQuelle = 1
    spalteZiel = 1


    While Not IsEmpty(angebot.Cells(zeileQuelle, spalteQuelle))

    For zeileZiel = 3 To haupt.Cells(Rows.Count, 1).End(xlUp).Row

    If angebot.Cells(zeileQuelle, spalteQuelle).Value = haupt.Cells(zeileZiel, spalteZiel) And angebot.Cells(zeileQuelle, spalteQuelle + 1).Value = haupt.Cells(zeileZiel, spalteZiel + 1)
    And angebot.Cells(zeileQuelle, spalteQuelle .Value = haupt.Cells(zeileZiel, spalteZiel + 3) Then

    Exit For
    End If
    End If

    Next zeileZiel

    haupt.Cells(zeileZiel, spalteZiel).Value = angebot.Cells(zeileQuelle, spalteQuelle) 'Liste.Cells(zeileListe, spalteListe)
    haupt.Cells(zeileZiel, spalteZiel + 1).Value = angebot.Cells(zeileQuelle, spalteQuelle + 1)
    haupt.Cells(zeileZiel, spalteZiel + 2).Value = angebot.Cells(zeileQuelle, spalteQuelle + 2)
    haupt.Cells(zeileZiel, spalteZiel + 3).Value = angebot.Cells(zeileQuelle, spalteQuelle + 3)

    zeileQuelle = zeileQuelle + 1
    Wend
    'wieder auf 4 wenn danach code weiter geht
    zeileQuelle = 4

    End Sub
    1. Für Code bitte CodeTags verwenden; die kleinen Buttons oberhalb des AntwortBox-Feldes, in diesem Fall der mit der Aufschrift [VB 6.0], damit sowas dabei rauskommt:

    Visual Basic-Quellcode

    1. If Foo Then bar


    2.

    Nicoleka95 schrieb:

    ich habe ein sehr lange If-Schleife, die 2 Tabellen miteinander vergleichen soll.
    Nur haben meine Tabellen nicht nur 3 Spalten sonder 24 und wenn ich die If-Schleife so weiter führe, wie bisher, kann ich maximal bis zur 10 zeile iterrieren, dann springt der Cusor
    in die nächste und es wird mir ein Fehler angezeigt.

    Die If-Schleife kann nur von einer Steinlaus korrekt implementiert werden. Aber egal, btt: Welcher Fehler? kommt denn bitte? Das ist immer wichtig mitzuteilen. An welcher Stelle des Codes gehst Du von der Aussage aus, dass das Makro nur bis 10 zählen kann? Die 10 ist nirgends festgelegt. Nur die Tatsache, dass das Makro bis eine Zeile vor einer Leerzeile auswerten soll (haupt.Cells(Rows.Count, 1).End(xlUp).Row). Dann springt er in die nächste was? Zeile? Spalte? Tabelle? Excelversion? Realitätsebene? Kann es sein, dass einfach noch eine weitere Schleife außenrum fehlt, die den aktuell auszuwertenden Spaltenindex erhöht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,
    ich bräuchte eine Abfrage, die prüft, ob genau diese zeile(mit den 24) spalten in der anderen Tabelle vorhanden ist oder nicht.
    Wenn nicht, dann füge ich sie am ende der Tabelle ein.

    ich habe es versucht mit der If-Schleife zu lösen, aber die sie so unendlich lang werden würde und der Code nicht in eine Zeile passt, bräuchte ich eine andere Möglichkeit der Abrage
    1. Excel Funktionen
    Möglichkeit A
    - Definiere eine Excel.Range mit den Daten, die du durchsuchen möchtest.
    - Verwende die Funktion Find, um nach den Daten zu suchen. Ungefär so 'Excel.Range.Find(zu_findender_wert,,,Excel.XlLookAt.xlWhole)'. Den 4. Parameter der Find Funktion mußt du eventuell anpassen.
    - Wurde der zu findende Wert gefunden, bekommst du eine Range zurück, ansonsten Nothing.
    Möglichkeit B
    - Definiere eine Excel.Range mit der Spalte, die du durchsuchen möchtest.
    - Sortiere die Daten anhand der Spalte, Excel.Range.Sort()
    - Benutze die Funktion Match, ungefähr so 'Excel.App.WorksheetFunction.Match(zu_findender_wert, Range, Parameter3). Der Parameter3 richtet sich nach der Sortierreihenfolge (aufsteigend oder absteigend), bitte nachlesen !

    Anmerkung: Egal ob du Möglichkeit A oder B benutzt, das Vergleichen von Tabellen mit 24 Spalten und einigen Tausend Datensätzen kann auf langsamen Rechnern schon mal 45 Minuten oder mehr dauern !


    2. Sinnvolle Datenhaltung / Vorgehensweise
    Du hast offenbar 2 Tabellen, die vom Aufbau her identisch sind. Ich nenne Sie mal Haupttabelle und Angebotstabelle. Warum fügst du am Ende jeder Tabelle nicht eine neue Spalte ein. In der Haupttabelle fügst du in der neuen Spalte den Wert "Tabelle1" ein, in der Angebotstabelle "Tabelle2". Nun kopierst du einfach alle Daten von Tabelle1 nach Tabelle3 (eine neue Tabelle) und ebenfalls alle Daten von Tabelle2 nach Tabelle3. In Tabelle3 von Excel die doppelt vorkommenden Werte löschen lassen und fertig. Ab nun braucht man nur noch Tabelle3 pflegen.
    Hallo,

    sowas lässt sich beschleunigen. Z.B. Spalte für Spalte vergleichen, bei dem ersten Unterschied abbrechen. Dann nicht die Value, sondern die Value2 vergleichen. Die Zellen nicht bei jedem Durchlauf neu auslesen, sondern in Variablen ablegen.

    Es geht auch mit Excel-Boardmitteln. Evtl. geht das dann nocht schneller. Spalte25 hat die ersten 24 Verkettet. In der anderen Tabelle dann einfach mit Vergleich suchen.

    Habe mal sowas als Beispiel angehängt.
    Dateien
    • Vergleich.xlsx

      (24,43 kB, 138 mal heruntergeladen, zuletzt: )
    Gruß
    Peterfido

    Keine Unterstützung per PN!