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

Forumthread: VBA Werte in bestimmte Zeile kopieren

VBA Werte in bestimmte Zeile kopieren
16.06.2022 09:39:55
Gerhard
Ein herzliches Hallo zusammen!
Ich habe hier schon einige wertvolle Tips gefunden. Es ist ja so, dass einige/viele das gleiche Problem lösen möchten.
Trotz intensiver Suche habe für meine aktuelle Frage noch keine Antwort gefunden. Ich habe viel gesucht und gefunden, schaffe es aber nicht, die Beispiele auf meine Frage zu adaptieren.
Ausgangslage:
Ich habe eine Excel-Datei mit mehreren Tabellenblättern. Im Tabellenblatt REPORT steht in der Zelle C5 ein (beliebiges) Datum. In der gleichen Zeile stehen im Bereich D5 bis X5 Daten. Im Bereich C9 bis C373 steht das fortlaufende Datum, beginnend mit dem 01.01.2022 bis zum Jahresende.
Gewünschte Lösung:
Ich möchte nun in jene Zeile die Daten aus Zeile 5 kopieren, in der das Datum aus Spalte C9:C373 mit dem Datum von C5 übereinstimmt.
Angenommen, das Datum findet sich in C200, dann sollte D5:X5 nach D220:X220 kopiert werden.
Vielen Dank für eure Unterstützung.
LG Gerhard
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 09:53:06
Oberschlumpf
Hi Gerhard,
der folgende Code (ungetestet) muss ins Klassenmodul des Tabellenblatts, in dem alles passieren soll

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lrgFindDate As Range
If Target.Address = "$C$5" Then
If Target.Value  "" And IsDate(Target.Value) Then
Set lrgFindDate = Range("C9:C373").Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not lrgFindDate Is Nothing Then
Range("C5:X5").Copy Range("C" & lrgFindDate.Row)
Set lrgFindDate = Nothing
End If
End If
End If
End Sub
Hilfts?
Ciao
Thorsten
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 10:12:52
Gerhard
Hallo Oberschlumpf! Vielen Dank für deine rasche Antwort. Sorry, warum Klassenmodul und nicht Makro? Ich habe vergessen zu erwähnen, dass ich die Suche/Kopieren als Makro z.B. mit dem Namen "Buchen" ausführen möchte. Danke! LG Gerhard
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 10:27:29
Oberschlumpf
Hi,
weil das Worksheet_Change-Ereignis nur im jeweiligen Klassenmodul funktioniert.
Und..ähh?...im Klassenmodul, egal welches, sind auch alles Makros, bzw VBA-Befehle.
(ich vermute, deine irreführende Frage "...Sorry, warum Klassenmodul und nicht Makro?..." kommt daher, weil du dich mit VBA noch nicht so gut auskennst)
Natürlich könntest du meinen Code auch in einem allgemeinen Modul unter...

Sub Buchen()
...hier mein Code ohne die Private Sub + End Sub Zeilen
End Sub
...speichern.
Aber dann müsstest du dafür sorgen, dass der richtige Wert (Inhalt aus Zelle C5) im richtigen Moment an das Makro "Buchen" übergeben wird, und dass im Makro "Buchen" korrekt auf das richtige Tabellenblatt referenziert wird.
Wenn du per Upload eine Bsp-Datei mit ausreichend vielen Bsp-Datenzeilen zeigst, kann ich versuchen, dir den Code in die Bsp-Dateie einzubauen.
Ciao
Thorsten
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 10:48:27
Matthias
Hallo,
Zitat:
Angenommen, das Datum findet sich in C200, dann sollte D5:X5 nach D220:X220 kopiert werden.
? Bist Du sicher das Du nicht D200:X200 meinst.
Geht übrigens auch mit Formeln.(ohn VBA)
In D9:
=WENNFEHLER(SVERWEIS($C9;$C$5:$X$5;SPALTE()-2;0);"") und nach rechts und nach unten kopieren.
Gruß ...
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 12:10:24
Gerhard
@MatthiasL: Ja, du hast recht, es sollte in die Zeile mit dem übereinstimmenden Datum kopiert werden, also in die Zeile 200!
VBA braucht es deshalb, weil sich das Eingabedatum und die zu kopierenden Daten täglich ändern. Es wird so eine Art Journal, das täglich fortgeschrieben wird.
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 11:37:36
GerdL
Moin Gerhard!

Sub Buchen()
If WorksheetFunction.CountIf(Worksheets("REPORT").Range("C9:C373"), _
Worksheets("REPORT").Range("C5").Value) Then
Worksheets("REPORT").Range("D5:X5").Copy _
Worksheets("REPORT").Cells(Application.Match(CLng(CDate(Worksheets("REPORT").Value)), _
Worksheets("REPORT").Range("C9:C373"), 0) + 8, 4)
End If
End Sub
Gruß Gerd
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 12:50:52
Gerhard
Hallo Gerd! Vielen Dank! Allein von der ästhetischen Betrachtung gefällt mir dein Code sehr gut. Leider gibt es einen Laufzeitfehler 438 und die letzten 3 Zeilen vor end if werden gelb markiert. Vielleicht ist es ein Klammer-Problem, aber ich kann es nicht identifizieren. Magst du es dir nochmals ansehen? Danke! LG Gerhard
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 13:05:49
GerdL
Nein, entschuldige bitte. Da ging mir beim Aufhübschen ein Range verloren.

Sub Buchen()
If WorksheetFunction.CountIf(Worksheets("REPORT").Range("C9:C373"), _
Worksheets("REPORT").Range("C5").Value) Then
Worksheets("REPORT").Range("D5:X5").Copy _
Worksheets("REPORT").Cells(Application.Match(CLng(CDate(Worksheets("REPORT").Range("C5").Value)), _
Worksheets("REPORT").Range("C9:C373"), 0) + 8, 4)
End If
End Sub
Gruß Gerd
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 13:12:46
Gerhard
Vielen, lieben Dank, Gerd! Dein Code funktioniert hervorragend und ist zudem in seiner Eleganz für mich verständlich!
Problem gelöst.
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 13:17:12
Gerhard
Noch ein Wunsch. In den Zellen in Zeile 5 stehen Formeln. Es sollen aber nur die Werte kopiert werden, nicht die Formeln. Kannst du mir nochmals helfen? Danke!
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 14:10:03
GerdL
Hallo Gerhard,
probiere mal.

Sub Buchen_2()
Dim Zeile As Long
With Worksheets("REPORT")
If WorksheetFunction.CountIf(.Range("C9:C373"), .Range("C5").Value) Then
Zeile = Application.Match(CLng(CDate(.Range("C5").Value)), .Range("C9:C373"), 0) + 8
.Range("D" & Zeile & ":X" & Zeile).Value = .Range("D5:X5").Value
End If
End With
End Sub
Gruß Gerd
Anzeige
AW: VBA Werte in bestimmte Zeile kopieren
16.06.2022 15:08:06
Gerhard
Vielen, vielen Dank Gerd, für deine wiederholten Bemühungen um mein Problem! Ich weiß das sehr zu schätzen.
Du hast mich sehr glücklich gemacht. Es funktioniert nur alles genauso, wie gewünscht.
Ein bißchen verstehe sogar deinen Code ;) Herzliche Grüße aus Tirol, Gerhard
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Werte in bestimmte Zeile kopieren


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und gehe zum Tabellenblatt „REPORT“.

  2. Füge den VBA-Code in ein Modul oder das Klassenmodul ein. Hier ist der Code, den du verwenden kannst, um die Werte aus Zeile 5 in die entsprechende Zeile zu kopieren:

    Sub Buchen_2()
       Dim Zeile As Long
       With Worksheets("REPORT")
           If WorksheetFunction.CountIf(.Range("C9:C373"), .Range("C5").Value) Then
               Zeile = Application.Match(CLng(CDate(.Range("C5").Value)), .Range("C9:C373"), 0) + 8
               .Range("D" & Zeile & ":X" & Zeile).Value = .Range("D5:X5").Value
           End If
       End With
    End Sub
  3. Starte das Makro „Buchen_2“, nachdem du das Datum in Zelle C5 eingegeben hast. Die Werte aus D5:X5 werden in die Zeile kopiert, die dem Datum in C5 entspricht.


Häufige Fehler und Lösungen

  • Laufzeitfehler 438: Dieser Fehler tritt auf, wenn ein Objekt oder eine Methode nicht gefunden werden kann. Überprüfe, ob du die richtige Syntax und die richtigen Objekte verwendest.

  • Kopieren von Formeln anstelle von Werten: Stelle sicher, dass du .Value anstelle von .Formula verwendest, um nur die Werte zu kopieren.


Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch Formeln nutzen. Zum Beispiel in Zelle D9:

=WENNFEHLER(SVERWEIS($C9;$C$5:$X$5;SPALTE()-2;0);"")

Diese Formel sucht nach dem Datum in C9 und gibt den entsprechenden Wert zurück. Ziehe die Formel nach rechts und nach unten, um sie auf die anderen Zellen anzuwenden.


Praktische Beispiele

Angenommen, du hast in Zelle C5 das Datum „01.01.2022“ stehen und möchtest die Daten aus D5:X5 in die Zeile übertragen, in der das Datum in C9:C373 übereinstimmt. Wenn das Datum in C200 gefunden wird, wird der folgende VBA-Code die Werte in D220:X220 kopieren.


Tipps für Profis

  • Verwende „Option Explicit“ am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um sicherzustellen, dass dein Code stabil und benutzerfreundlich bleibt.

  • Modularisierung: Wenn du komplexere Aufgaben hast, teile deinen Code in kleinere, wiederverwendbare Subroutinen auf.


FAQ: Häufige Fragen

1. Warum sollte ich ein Klassenmodul verwenden?
Das Klassenmodul ermöglicht es, Ereignisse wie Worksheet_Change zu behandeln, was dir erlaubt, automatisch auf Änderungen zu reagieren.

2. Was mache ich, wenn mein Makro nicht funktioniert?
Überprüfe den Code auf Syntaxfehler, stelle sicher, dass alle verwendeten Zellen und Bereiche existieren, und teste den Code Schritt für Schritt im Debugger.

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