Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Datum suchen und Daten übertragen

VBA Datum suchen und Daten übertragen
25.06.2022 03:13:35
Dirk
Moin Moin,
ich habe in diesem archiviertem Beitrag nach einer Lösung zum suchen nach einem Datum per VBA gesucht.
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1887665#1887979
Dieser hat auch in meiner Beispieldatei funktioniert.
Jetzt habe ich das Datum in der Datei von Januar auf Januar-Dezember erweitert.
Auch den Bereich in dem gesucht wird im Code angepasst.
Wenn ich jetzt nach z.B. dem 14.11.2022 suche, findet der Code den 14.01.2022.
Was mache ich falsch?
Es scheint das nur nach dem 14. gesucht wird und mir das erste Ergebnis ausgespuckt wird.
Die Zellen sind alle als Datum formatiert.

Sub Speichern()
Dim rngTag As Range
Set rngTag = Sheets("Speicher_einteilung").Range("M30:NN30"). _
Find(Format(Sheets("Einteilung").Range("C2"), "d"), LookIn:=xlValues, lookat:=xlWhole)
If Not rngTag Is Nothing Then
Sheets("Einteilung").Range("AI6:AI68").Copy
Sheets("Speicher_einteilung").Cells(32, rngTag.Column).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End Sub
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Datum suchen und Daten übertragen
25.06.2022 09:55:43
RPP63
Moin!
Format(Datum, "d") erzeugt eine Text-Ganzzahl zwischen 1 und 31
Du suchst aber ein Datum im Bereich M30:NN30
Ein Datum findet man in VBA zuverlässig mittels Application.Match(Datum, Bereich, 0)
Dies liefert die Spaltenzahl des Bereichs.
Wenn "vor" M30 kein Datum steht, sollte man den Bereich gleich auf die ganze Zeile ausweiten, erspart späteres Umrechnen.
Auch wenn eine Zahl erwartet wird, sollte man die Variable als Variant deklarieren.
Ein Variant kann nämlich auch einen Fehlerwert aufnehmen, wenn das Suchdatum nicht gefunden wird!
Wenn Deine Daten lückenlos aufsteigend eingetragen sind (wovon bei Range("M30:NN30").Columns.Count = 366 auszugehen ist), kannst Du Dir diese ganzen Verrenkungen auch schlicht sparen und die Spalte einfach ausrechnen!
Heute beispielsweise ist der 176ste Tag des Jahres.
Einfachst zu errechnen mittels

Format(Date, "y")
Gruß Ralf
Anzeige
AW: VBA Datum suchen und Daten übertragen
25.06.2022 10:25:45
GerdL
Moin,
die Kombination von Datum per Formel gesetzt und Zellenformat "Tag" ist imho für Match unmöglich u. für Find bei mehreren Monaten ebenso. Da hilft durchrechnen der Zellenposition oder die Datümer ohne Formel eintragen.
Gruß Gerd.
AW: VBA Datum suchen und Daten übertragen
25.06.2022 10:47:40
RPP63
Moin!
Ich hatte mir die Archiv-Datei nicht angesehen.
Wenn da nur Tageszahlen stehen, hast Du natürlich Recht, Gerd.
Zum Glück ;) hatte ich ja ebenfalls dargestellt, wie einfach man die Tageszahl eines Tags im lückenlosen Jahr ermitteln kann.
Gruß Ralf
Anzeige
AW: VBA Datum suchen und Daten übertragen
25.06.2022 23:27:43
Dirk
Moin,
uff ok. Also die Zeile ausrechnen.
Und wie mache ich das?
Ich brauche einen "Speicher Button" der mir die Daten an die richtige stelle kopiert.
Also z.B. aus "Arbeitsblatt1" in Zelle A1 das Datum nimmt, in "Arbeitsblatt2" in Zeile 30 die Zelle ausrechnet und aus "Arbeitsblatt1" B1 bis B10 unter die gefundene Zelle kopiert. :/
Anzeige
AW: VBA Datum suchen und Daten übertragen
26.06.2022 11:06:33
GerdL
Hallo Dirk!
Der Kalender darf ab M30 nach rechts keine Lücken haben und die Datumszelle braucht einen passenden Eintrag.
Ohne Plausibilitätsprüfungen:

Sub Speichern2()
Dim Spalte As Long
Dim Tag As Long
With Sheets("Einteilung")
Tag = .Range("C2") - DateSerial(Year(.Range("C2")), 1, 1) + 1
Spalte = lngTag + 12   '(Spalte M= 13)
.Range("AI6:AI68").Copy
End With
Sheets("Speicher_einteilung").Cells(32, Spalte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Gruß Gerd
Anzeige
AW: korrigiert
26.06.2022 11:10:20
GerdL

Sub Speichern2()
Dim Spalte As Long
Dim Tag As Long
With Sheets("Einteilung")
Tag = .Range("C2") - DateSerial(Year(.Range("C2")), 1, 1) + 1
Spalte = Tag + 12   '(Spalte M= 13)
.Range("AI6:AI68").Copy
End With
Sheets("Speicher_einteilung").Cells(32, Spalte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige