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

Forumthread: einen Wert in mehreren Sheets finden und die Zeilen kopieren

einen Wert in mehreren Sheets finden und die Zeilen kopieren
22.08.2024 00:17:06
Ringberger
Hallo,

ich habe ein Problem ein Makro zu schreiben, an dem bisher nicht nur ich verzweifelt bin.
Excel wird verwendet um ein Kassenbuch zu führen. Die Arbeitsmappe besteht aus mehreren Tabellenblättern. Unter anderem für jeden Kalendermonat eines. Dann weitere Tabellenblätter für verschiedene Auswertungen. Eines davon für den Splittbuchungsbeleg. Die Monatsblätter (Tabelle1 - Tabelle12) sind erst einmal identisch aufgebaut. In Spalte C, von Zeile 4 bis maximal 93 sind alle Buchungen durchlaufend nummeriert. Es existiert also für jede Buchung eine lfd. Nummer nur einmal. Außer bei Splittbuchungen, dort hat jede dazu gehörige Buchung die selbe lfd. Nummer.
Und das ist das Ziel: Im Splittbuchungsbeleg wird die zu suchende lfd. Nummer eingetragen. Nach dem Klick auf die Schaltfläche "Beleg aktualisieren", soll Excel NUR die Tabellen 1 bis 12 durchsuchen und die gefundenen Zeilen, mit der entsprechenden lfd. Nummer, ins Tabellenblatt "Splittbuchungsbeleg" kopieren.
Ich habe mit der Funktion "If" begonnen, um die einzelnen Stück für Stück zu durchsuchen, mit Angabe der Spalte ("C4:C93") und Find_(what....) mit Angabe der Zelle, in der der zu suchende Wert steht. Ergänzt durch LookAt:=xlWhole damit nur der eingetragene Wert gesucht wird.
Da kommt dann die erste Fehlermeldung: "Erwartet wird End If". Dieses ist aber im Sub eingetragen. Nun wissen wir nicht mehr weiter.
Bisher mussten wir diese Einträge von Hand ausführen, also alles doppelt schreiben. Übers Jahr gesehen ein ganz schöner Mehraufwand. Deswegen hätten wir das gerne automatisiert.
Können Sie uns da helfen?

Mit freundlichem Gruß

Ringberger
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: einen Wert in mehreren Sheets finden und die Zeilen kopieren
22.08.2024 00:38:09
ralf_b
am besten wäre hier eine Beispieldatei mit dem identischen Aufbau wie das Original.
" end if erwartet" tritt auch auf wenn du dazwischen eine for schleife nicht geschlossen hast oder wenn andere Befehle nicht sauber abgeschlossen wurden.
ein einzeiliges IF then kann hier auch ursächlich sein oder eine offene with klammer.
zeig mal das Makro.
Anzeige
auf verdacht
22.08.2024 02:42:29
ralf_b
hier was zum basteln

Sub holebelegnrdaten()

Dim splitSheet As Worksheet, i&, belegnr$, firstAddress$, rngfund As Range

' Setzt das Ziel-Arbeitsblatt
Set splitSheet = ThisWorkbook.Worksheets("Splittbuchungsbeleg")

belegnr = "334blabla"

For i = 1 To 12
With ThisWorkbook.Worksheets("Tabelle" & i)

Set rngfund = .Range("C4:C93").Find(what:=belegnr, LookIn:=xlValues, lookat:=xlWhole)
If Not rngfund Is Nothing Then
firstAddress = rngfund.Address
Do
rngfund.EntireRow.Copy splitSheet.Range("A" & splitSheet.Rows.Count).End(xlUp).Offset(1, 0)

Set rngfund = .Range("C4:C93").FindNext(rngfund)
Loop While Not rngfund Is Nothing And rngfund.Address > firstAddress

End If

End With
Next
End Sub
Anzeige
AW: auf verdacht
23.08.2024 11:03:43
Ringberger
Hallo Ralf,

erst einmal tausend Dank für die superschnelle Antwort. Hier habe ich eine Beispieldatei hoch geladen.

https://www.herber.de/bbs/user/171786.xlsx

Ich habe in dem Makro nur die Quelle für Belegnummer angepasst und den Namen des Tabellenblattes für die Splittbuchung auf "SBeleg" eingekürzt. Die Tabellenblätter für November und Dezember musste ich wieder löschen wegen der Dateigröße.
Als Fehlermeldung bekomme ich noch "Objekt erforderlich". Da weiß ich aber nicht mehr weiter.

VG und Danke

Andreas
Anzeige
AW: auf verdacht
23.08.2024 12:30:51
ralf_b
da kann ich nur mutmaßen, da deine Beispieldatei nicht das Original widerspiegelt. Es befindet sich kein Makro darin und diverse Formeln zeigen auf andere Dateien. Das kommt vom Kopieren.
Ich schätze das es eines der Worksheets Tabelle1 bis Tabelle12 nicht gibt oder sie etwas anders geschrieben sind. Objekte im Code Blätter(Worksheet) und Zellbereiche(Range)
Da solltest du suchen. Achte auf Leerzeichen vor oder hinter den Namen. z.b. "Tabelle1 " oder Worksheets(" SBeleg ")

Anzeige
AW: auf verdacht
25.08.2024 21:49:22
Ringberger
ich habe zwei Einträge in rot gefunden. Da fehlten beim Namen ("Beleg) am Ende die Anführungszeichen. Das habe ich korrigiert. Aber kein Erfolg. Mehr Fehler habe ich anhand der Tipps nicht gefunden. Ich hätte auch gerne ein Beispiel der kompletten Arbeitsmappe hochgeladen. Aber sie ist wie gesagt ziemlich umfangreich, 38 Tabellenblätter mit ca. 2,8 MB.
Anzeige
AW: auf verdacht
26.08.2024 22:56:54
ralf_b
vielleicht sind ja nicht alle Blätter in der Beispieldatei notwendig und auch nicht mit allen Datenzeilen.
Wichtig: die für den Code wichtigen Daten sollten vorhanden sein und der Fehler auftreten.
AW: auf verdacht
06.09.2024 13:40:24
Ringberger
Hallo Ralf,
es sind alle Blätter in der Datei notwendig. In den Tabellenblättern 1 - 12 sind nur die Datenzeilen 4 bis 93 relevant (Range("C4:C93")). Gefunden werden soll mit dem Befehl


Find(what:=SBeleg.Range("V4"), LookIn:=xlValues, lookat:=xlWhole)

Das Zielarbeitsblatt ist "SBeleg" Range"A60".
Von den gefundenen Zeilen (immer mindestens zwei, können auch mehr sein, mehr als fünf nicht zu erwarten) sind für den SBeleg nicht alle Spalten notwendig.
Relevant sind nur die Spalten:
B = Datum
C = Belegnr.
D = Geldkonto Nr.
E = Sachkonto Nr.
F = Textfeld
G = Geldbetrag Einnahme
H = Geldbetrag Ausgabe.
Die Zeilen mit der identischen Belegnr. sind dann, quasi als Zwischenablage, in den Bereich ab A60 zu kopieren. Von will ich die Werte mit der entsprechenden Formatierung in die Zielzellen holen.
Ich bitte Sie inständig sich der Sache noch einmal anzunehmen. Unseren ehrenamtlichen Kassierern würde da sehr geholfen. Wenn es nicht klappt, dann muss es halt weiter manuell ausgefüllt werden. Ich würde gerne die Mustedatei schicken, aber die ist ja zu groß.

Danke

Anzeige
AW: auf verdacht
06.09.2024 22:45:21
ralf_b
ralf_b(at)wolke7(dot)net
die klammerausdrücke ersetzen. schick mir die Datei.
der Thread ist schon im Archiv. Hast dir ja ne Menge Zeit gelassen.
AW: auf verdacht
07.09.2024 11:28:05
Ringberger
Hallo Ralf,

ich habe hier, mit Hilfe ähnlicher Vorlagen das folgende Makro zu bauen. Erhalte aber nur die Meldung "Objekt erforderlich". Hilft mir jedoch nicht weiter.


Sub Datenzeilen_kopieren()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim SplitSheet As Worksheet, i&, belegnr$

Range("A60:G67").ClearContents

'Setzt das Ziel-Arbeitsblatt
Set SplitSheet = ThisWorkbook.Worksheets("SBeleg")

belegnr = SBeleg.Range("V4")

For i = 1 To 12
With ThisWorkbook.Worksheets("Tabelle" & i)
ZeileMax = UsedRange.Rows.Count
n = 60

For Zeile = 4 To ZeileMax
If .Cells("C4:C93").Value = belegnr Then
.Rows(Zeile).Copy Destination:=SplitSheet.Rows(n)
n = n + 1

End If
Next Zeile
End With
Next
End Sub
Anzeige
AW: auf verdacht
07.09.2024 22:22:09
ralf_b
wenn jetzt nicht geht, dann mußt du jemand Anderes fragen.
der Code sollte in ein allgemeines Modul ausgelagert werden. Die Blattbezüge funktionieren trotzdem.
Option Explicit


Sub Datenzeilen_kopieren()
Dim Zeile As Long
Dim n As Long
Dim SplitSheet As Worksheet, i&, belegnr$
Dim datasheet As Worksheet
'Setzt das Ziel-Arbeitsblatt
Set SplitSheet = ThisWorkbook.Worksheets("SBeleg")

SplitSheet.Range("A60:G67").ClearContents

belegnr = SplitSheet.Range("V4")
n = 60
For i = 1 To 12
On Error Resume Next
'wie heisst die Tabelle ?? Tabelle01 oder Tabelle1 oder 01
'hier wird 01 verwendet
Set datasheet = ThisWorkbook.Worksheets(Format(i, "00"))
If Err = 0 Then
With datasheet
For Zeile = 4 To .UsedRange.Rows.Count
If .Cells(Zeile, "C").Value = belegnr Then
.Cells(Zeile, 2).Resize(1, 7).Copy
SplitSheet.Cells(n, 1).PasteSpecial xlPasteValuesAndNumberFormats
n = n + 1
End If
Next Zeile
End With
Else
Err.Clear
MsgBox "Arbeitsblatt '" & Format(i, "00") & "' existiert nicht"
End If
Next
End Sub

Anzeige
AW: auf verdacht
08.09.2024 00:37:55
Ringberger
Hallo Ralf,

es funktioniert. Danke, danke, danke. Kann man sich da ein bisschen erkenntlich zeigen. Würde ich gerne tun.

VG

Andreas
AW: auf verdacht
08.09.2024 10:13:48
ralf_b
erkenntlich zeigen geht immer.
meine email hast du ja schon.
;

Forumthreads zu verwandten Themen

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