Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige