Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro um selektiv einen Index-Vergleich anzuwenden

Makro um selektiv einen Index-Vergleich anzuwenden
25.11.2015 20:34:59
Michael
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

Die Datei https://www.herber.de/bbs/user/101807.xlsx wurde aus Datenschutzgründen gelöscht

Ich bin für jede Hilfe dankbar.
Beste Grüße Michael

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro um selektiv einen Index-Vergleich anzuwenden
25.11.2015 23:02:48
Michael
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?

Anzeige
Klärung
28.11.2015 17:41:46
Michael
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

Anzeige
AW: Klärung
29.11.2015 12:47:21
Michael
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 (-:

AW: Klärung
29.11.2015 16:42:08
Michael
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

Anzeige
Noch ne Frage
29.11.2015 17:00:24
Michael
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.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige