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

Daten übertragen für Datum >=heute

Daten übertragen für Datum >=heute
23.11.2015 17:36:43
Michael
Hallo zusammen,
ich habe ein Problem von dem ich denke, dass es nur mit VBA zu lösen ist. Leider sind meine Skills doch eher sehr begrenzt.
Ich erhalte täglich Produktionsdaten für verschiedene Produkte für die nächsten 31 Tage (rollierendes Update) und kopiere mir diese mittels eines Makros in einen Excelreiter (1).
Von diesem (1) möchte ich jetzt die Werte in einen weiteren Reiter (2) kopieren. In diesem Reiter (2) gibt es auch ein Zeile mit Datumswerten. Das Makro identifiziert das aktuelle Datum (2) und kopiert darunter die Werte aus dem ursprünglichen Tabellenblatt (1). Dadurch erschaffe ich mir eine Datenbank.
Mit folgendem Makro habe ich das ganze sehr simpel realisiert. Das Problem. Wenn sich die Datenstruktur ändert, sprich irgendjemand in (1) eine Zeile einfügt dann kann ich meine "Datenbank" in die Tonne werfen.
Sub CopyNewData()
Dim zelle As Range
Tabelle5.Range("I11:AX709").Copy
Tabelle1.Activate
For Each zelle In Tabelle1.Range("I5:TG5")
If zelle = DateValue(Now) Then
With Cells(zelle.Row + 6, zelle.Column)
.PasteSpecial xlPasteValues
End With
End If
Next zelle
Tabelle5.Activate
End Sub
Eine Lösung für das Problem wäre denke ich mit einer Schleife das Datum auf >= heute abzuprüfen und darunter dann eine Index-Vergleich-Formel über VBA ausführen zu lassen. Oder gibt es da einen besseren Weg? Ich hoffe jemand kann mir helfen ein Makro in dieser Komplexität bin ich noch nicht angegangen.
Beste Grüße,
Michael

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten übertragen für Datum >=heute
23.11.2015 21:10:07
Michael
Habe es jetzt mal selbst probiert mit folgender Formel. Daten sollen von Tabelle5 nach Tabelle1 kopiert werden.
Sub CopyNewData2()
Dim zelle As Range
Dim i As Integer
Dim y As Integer
Tabelle1.Activate
For Each zelle In Tabelle1.Range("I5:TG5")
For i = 1 To 32
For y = 1 To 700
If zelle = DateValue(Now - 1 + i) Then
Cells(zelle.Row + 5 + y, zelle.Column) = Application.WorksheetFunction.Index( _
Tabelle5.Range("I11:AO709"), _
Application.WorksheetFunction.Match(Tabelle1.Cells(zelle.Row + 5 + y, 1),  _
Tabelle5.Range("A11:A709"), 0), _
Application.WorksheetFunction.Match(Tabelle1.Cells(zelle.Row - 5 - y, zelle. _
Column), Tabelle5.Range("I10:AO10"), 0))
End If
Next y
Next i
Next zelle
Tabelle5.Activate
End Sub
Bekomme aber einen Fehler bei den WorksheetFunctions )-:

Anzeige
AW: Daten übertragen für Datum >=heute
23.11.2015 23:06:54
fcs
Hallo Michael,
grundsätzlich ist es ein Problem, wenn
Application.WorksheetFunction.Match(Wert,Bereich,0)
den gesuchten Wert nicht findet. Dann gibt es immer einen Fehler mit Abbruch.
Der Ausdruck
Tabelle1.Cells(zelle.Row - 5 - y, zelle.Column)
kann nicht funktionieren. Zelle.Row liefert bei dir immer 5. Damit ergibt sich als Zeilen-Nummer immer ein negatier Wert, das mag Excel auch nicht. Die Zeilennummer muss immer &gt=1 sein.
Löse dein Makro in der folgenden Form auf und versuche dann die einzelnen Parameter zu korrigieren. So kannst du besser kontrollieren wo noch Probleme sind und im Schrittmodus (Tatse F8) die Werte kontrollieren bzw. im Lokalfenster anzeigen lassen.
Gruß
Franz
PS. für weitere Hilfe solltes du eine Beispieldatei erstellen mit dem für Tabelle1 nach der Makro-Ausführung erwarteten Ergebnis.
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige