Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: 2 Arrays vergleichen
#1
Hallo zusammen,

ich habe ein File, auf dessen Basis wöchentlich ein Report an die anderen Abteilungen (Umsätze) versendet wird.
Dieses File beinhaltet alle gebuchten und reservierten Aufträge sowie welche Firmensparte den Umsatz "erzielt" hat bzw. bei Reservationen (hoffentlich) erzielen wird.
Da es von Woche zu Woche zu Änderungen kommt, haben die Rohdaten gut und gerne zu Jahresende 100'000 Zeilen (auch, da gewisse Aufträge doppelt vorkommen bzw. aufgrund gewisser Spezifikationen anders behandelt/geliefert werden als andere).

Mein Problem: Ich möchte gerne, dass ich die Datensätze der aktuellen Woche mit dem Datensatz der Vorwoche vergleichen kann, um zu schauen, welche Aufträge neu hinzugekommen, verändert oder komplett storniert wurden.

Ich habe es per VBA mit einer Schleife durch ein bzw. zwei Arrays versucht, jedoch dauerte dies in Spitzenzeiten bis zu 10 Minuten (trotzden MAssnahmen mit ScreenUpdating = false usw.). Basis für den Vergleich waren die ID's, jedoch kann es vorkommen, dass eine ID in der nächsten Woche gelöscht bzw. durch eine neue ersetzt wird, der Name jedoch gleich bleibt.

Mein Versuch bisher:
Code:
Dim ArrayAktuell As Variant
Code:
Dim ArrayVorwoche As Variant
Code:
Dim i As Long
Code:
Dim letzteZeile As Long
Code:
Dim ZeileEintrag As Long
Code:
'Sammelt die Daten der aktuellen Woche
Code:
With Tabelle2
Code:
  letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Code:
  ArrayAktuell = .Range(.Cells(2, 1), .Cells(letzteZeile, 5))
Code:
End With
Code:
'Sammelt die Daten der Vorwoche
Code:
With Tabelle1
Code:
  letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Code:
  ArrayVorwoche = .Range(.Cells(2, 1), .Cells(letzteZeile, 5))
Code:
End With
Code:
For i = 1 To UBound(ArrayAktuell)
Code:
 
Code:
  'Wenn ID gefunden
Code:
  If WorksheetFunction.Index(ArrayAktuell, Application.Match(ArrayAktuell(i, 1), ArrayVorwoche, 0)) > 0 Then
Code:
   
Code:
    'nichts passiert, da ok
Code:
 
Code:
  ElseIf WorksheetFunction.Index(ArrayAktuell, Application.Match(ArrayAktuell(i, 1), ArrayVorwoche, 0)) = 0 Then
Code:
   
Code:
    ZeileEintrag = Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row + 1
Code:
   
Code:
    Tabelle3.Cells(ZeileEintrag, 1).Value = ArrayAktuell(i, 1)
Code:
   
Code:
  End If
Code:
 
Code:
Next i
Code:
End Sub


Allerdings bekomme ich immer die Fehlermeldung "Typen unverträglich", kann aber nicht dahintersteigen, warum der Fehler auftritt.

Bin was Arrays angeht noch nicht ganz fit und daher froh um Denkanstösse eurerseits.

Oder gibt es eine Formellösung, welche ich nicht auf dem Schirm hatte?

Danke euch schonmal für die Hilfe und nachträglich frohes neues Jahr.

Liebe Grüsse,
Domi


Angehängte Dateien
.xlsm   Beispieldatei Array-Schleife Forum.xlsm (Größe: 25,81 KB / Downloads: 4)
Antworten Top
#2
Hallo Domi,

wenn ich es richtig verstanden habe, dann so:
Code:
Private Sub cmdCheck_Click()
    Dim ArrayAktuell(), ArrayVorwoche()
    Dim i&, j&, letzteZeile&, ZeileEintrag&

    'Sammelt die Daten der aktuellen Woche
    With Tabelle2
        letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
        ArrayAktuell = .Range(.Cells(2, 1), .Cells(letzteZeile, 5))
    End With

    'Sammelt die Daten der Vorwoche
    With Tabelle1
        letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
        ArrayVorwoche = .Range(.Cells(2, 1), .Cells(letzteZeile, 5))
    End With

    For i = 1 To UBound(ArrayAktuell)
        If ArrayAktuell(i, 1) <> ArrayVorwoche(i, 1) Then
            ZeileEintrag = Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row + 1
            For j = 1 To UBound(ArrayAktuell, 2)
                Tabelle3.Cells(ZeileEintrag, j).Value = ArrayAktuell(i, j)
            Next j
        End If
    Next i
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • HAMRacer44
Antworten Top
#3
Du brauchst kein VBA, nur:
- eine Spalte 'Woche'
- ein Pivottable

Dann siehst du unmittelbar die Löcher in Woche 1 und Woche 2


Angehängte Dateien
.xlsb   _ohne_VBA_snb.xlsb (Größe: 11,06 KB / Downloads: 2)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • HAMRacer44
Antworten Top
#4
Hallo Uwe und snb,

sorry für meine späte Rückmeldung.

Danke für eure Vorschläge, werde diese am Montag einbauen wenn ich wieder im Büro bin und euch Feedback geben.

Danke nochmal!

LG Domi
Antworten Top


Gehe zu:


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