Makro um selektiv einen Index-Vergleich anzuwenden

Bild

Betrifft: Makro um selektiv einen Index-Vergleich anzuwenden
von: Michael Eisele
Geschrieben am: 25.11.2015 20:34:59

Hallo zusammen,
ich hatte diese Woche schonmal probiert Hilfe für mein Problem zu finden. Leider wurde der Thread jetzt zugemacht da ich nicht die Zeit gefunden habe daran zu arbeiten und ins Archiv verschoben wenn ich das richtig erkannt habe.
https://www.herber.de/forum/archiv/1460to1464/t1460222.htm#1460222
Wie vom User fcs empfohlen habe ich mal eine Beispieldatei hochgeladen in der man sehen kann was ich versuche mittels VBA zu realisieren.
In Tabelle1 werden täglich neue variable Daten kopiert. Diese sollen von dort der Tabelle2 (ich nenne sie mal "Datenbank")zugeordnet werden allerdings nur für Spalten mit dem Datum heute oder ferner in der Zukunft. Ich habe versucht mit einer Schleife Zellen zu prüfen die in den Spalten "Heute" oder ferner in der Zukunft liegen. Das funktioniert dann auch ganz gut. Nur über den darunterliegenden Bereich mittels VBA einen Index-Vergleich zu realisieren gelingt mir noch nicht so ganz. Evtl. gibt es hierfür ja auch eine viel schlauere Lösung (-:
Anbei mein Code aus dem alten Thread mit den Verbesserungsvorschlägen von fcs:


Sub CopyNewData2()
    
    Dim zelle As Range
    Dim i As Integer
    Dim y As Integer
    
    Dim varWert As Variant, Zeile As Variant, Spalte As Variant
    
    Tabelle1.Activate
    For Each zelle In Tabelle1.Range("I5:TG5")
        
        For i = 1 To 32
            For y = 1 To 700
                If zelle.Value = Date - 1 + i Then
                    
                    varWert = Tabelle1.Cells(zelle.Row + 5 + y, 1).Value
                    Zeile = Application.Match(varWert, Tabelle5.Range("A11:A709"), 0)
                    
                    If Not IsError(Zeile) Then
                        
                        varWert = Tabelle1.Cells(zelle.Row - 5 - y, zelle.Column).Value
                        Spalte = Application.Match(varWert, Tabelle5.Range("I10:AO10"), 0)
                        
                        If Not IsError(Spalte) Then
                            Tabelle1.Cells(zelle.Row + 5 + y, zelle.Column) = _
                                Application.WorksheetFunction.Index( _
                                Tabelle5.Range("I11:AO709"), Zeile, Spalte)
                        End If
                    End If
                End If
            Next y
        Next i
    Next zelle
    
    
    Tabelle5.Activate
End Sub

https://www.herber.de/bbs/user/101807.xlsx
Ich bin für jede Hilfe dankbar.
Beste Grüße Michael

Bild

Betrifft: AW: Makro um selektiv einen Index-Vergleich anzuwenden
von: Michael Eisele
Geschrieben am: 25.11.2015 23:02:48
So das nachfolgende Makro funktioniert. Allerdings nur wenn ich die Werte für

  varWert = Tabelle1.Cells(zelle.Row - 5 - y, zelle.Column).Value
als Text formatiere warum auch immer das Datumsformat hier nicht funktioniert...
Was mir viel mehr Probleme macht ist, dass das Makro extrem lange braucht zum ausführen. Vermutlich einfach bedingt durch die großen Schleifen.
Sub CopyNewData2()
    
    Dim zelle As Range
    Dim i As Integer
    Dim y As Integer
    
    Dim varWert As Variant, Zeile As Variant, Spalte As Variant
    
    Tabelle1.Activate
    For Each zelle In Tabelle1.Range("I5:TG5")
        
        For i = 1 To 32
            If zelle.Value = DateValue(Now - 1 + i) Then
                For y = 1 To 700
                    varWert = Tabelle1.Cells(zelle.Row + 5 + y, 1).Value
                    Zeile = Application.Match(varWert, Tabelle5.Range("A11:A709"), 0)
                    
                    If Not IsError(Zeile) Then
                        
                        varWert = Tabelle1.Cells(zelle.Row, zelle.Column).Value
                        Spalte = Application.Match(varWert, Tabelle5.Range("I10:AO10"), 0)
                        
                        If Not IsError(Spalte) Then
                            Tabelle1.Cells(zelle.Row + 5 + y, zelle.Column) = _
                                Application.WorksheetFunction.Index( _
                                Tabelle5.Range("I11:AO709"), Zeile, Spalte)
                        End If
                    End If
                Next y
            End If
        Next i
    Next zelle
    
    
    Tabelle5.Activate
End Sub
Kennt jemand eine bessere Methode für meine Problematik um eine sich ändernde Tabelle variabel in eine statische zu übertragen?

Bild

Betrifft: Klärung
von: Michael
Geschrieben am: 28.11.2015 17:41:46
Hi Michael,
Du machst es einem nicht einfach, Dir zu helfen: der Code stimmt überhaupt nicht mit Deiner Beispieldatei überein: hier hast Du Tabelle5, dort Tabelle2, hier suchst Du in Zeile 5, dort steht in Zeile 5 rein gar nichts...
Gehe ich richtig in der Annahme, daß in Tabelle2 (der Beispieldatei) Deine Daten stehen, die Du turnusmäßig ab Stichtag in Tabelle1 übernehmen möchtest?
Ich habe jetzt mal in Tabelle1 in A1 ein zu Deinen Beispieldaten passendes Datum eingegeben, nämlich den 13.10.2015. Hier kannst Du dann später für weitere Tests die Formel =heute() reinschreiben.
Das Makro kopiert schlicht alles ab (einschließlich) dem in Tabelle2 gefundenen Datum + 30 Spalten in ein neues Tabellenblatt mit dem Datum als Namen und sortiert anschließend nach Spalte A.
Die Datei: https://www.herber.de/bbs/user/101874.xlsm
Das ist das, was ich bei der Fragestellung verstanden habe.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Klärung
von: Michael Eisele
Geschrieben am: 29.11.2015 12:47:21
Hallo Michael,
du hast vollkommen Recht meine Erklärungen sind viel zu wirr (-:
Die Originaldatei kann ich nicht hochladen ohne viel Entkernungsarbeit da sie bereits sensible Daten enthält. Ich habe die Beispieldatei jetzt nochmal angepasst jetzt sollte es klar sein was ich will
https://www.herber.de/bbs/user/101881.xlsx
So kurz wie möglich: Grüne Daten aus Tabelle 1 gemäß Identifikatoren (gelb und blau) der "Datenbank" in Tabelle 2 zuordnen.
Ich hoffe das ist verständlicher (-:

Bild

Betrifft: AW: Klärung
von: Michael
Geschrieben am: 29.11.2015 16:42:08
Hi Michael,
das werden wir auch noch hinbekommen, aber die Beschreibung ist immer noch nicht eindeutig:
wohin mit der grünen Spalte B? Die ist in Tabelle1 grün markiert, aber in Tabelle2 nicht vorhanden.
Außerdem: sind wirklich immer ALLE Zeilen-IDs in beiden Tabellen vorhanden? Oder kann es vorkommen, daß in einer der Tabellen zwischendrin eine Nummer fehlt? Was würde dann mit der entsprechenden Zeile passieren (sollen)?
a) Zeile in T1 vorhanden, nicht aber in T2?
b) Zeile in T2 vorhanden, nicht aber in T1?
Und: kann man definitiv davon ausgehen, daß die Datumsangaben in beiden Tabellen lückenlos fortlaufend sind?
Schöne Grüße,
Michael

Bild

Betrifft: Noch ne Frage
von: Michael
Geschrieben am: 29.11.2015 17:00:24
Hi Michael,
eine Frage noch: ist es immer so, daß der (gelbe) Identifikator in Tabelle1 einfach fortlaufende Zahlen sind? Von 1 in A2 bis irgendwas?
M.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Checkboxen und Rahmen"