Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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

VBA Suche auf mehreren Tabellenblättern und Übertrag

VBA Suche auf mehreren Tabellenblättern und Übertrag
14.11.2023 13:49:01
Christian
Hallo VBA-Profis,

ich habe hier eine Suchfunktion, die soweit eigentlich gut funktioniert, vielleicht etwas kompliziert ist, aber naja.
Was noch fehlt, ich aber irgendwie nicht zustande bringe, ist folgendes:
Auf Tabelle12 ist eine Suche hinterlegt, die einen Begriff oder Zahl in allen Tabellenblättern sucht und auf Tabelle12 dann ablegt/kopiert. Nun sollte noch die jeweilige Überschrift aus den einzelnen Tabellenblättern (A11:AJ11) nach einer Leerzeile eingetragen werden, da die Überschriften nicht immer gleich sind. Quasi soll das Blatt durchsucht werden, wenn dort das Gesuchte vorhanden ist, dann Überschrift kopieren und die Werte aus den Zeilen eintragen, eine Zeile frei, danach die nächste Tabelle......
Bis jetzt läuft die Suche durch, die Überschrift aus der ersten Tabelle wird eingetragen und dann darunter alle gefundenen Werte aus allen Tabellenblättern.

So sieht die Sache im Moment aus, leider kann ich euch keine Beispieldatei senden.

Sub FindenUndKopieren()
Dim rngSuch As Range
Dim wks As Worksheet
Dim wksDst As Worksheet
Dim strSuch As String
Dim rngFound As Range
Dim strFirst As String
Dim FoundAdr As String
Dim ZeSrc As Integer
Dim ZeDst As Integer
Dim lRow As Long
Dim lRowDst As Long
'Dim RaZelle As Range

With ThisWorkbook.Worksheets("Suche")
.Range("A8:XFD20000").Clear
Zeile = 9
End With


Set wksDst = Tabelle12
strSuch = Range("A2")
If strSuch = "" Then Exit Sub
For Each wks In Worksheets
If Not wks.Name = "Suche" Then
Set rngSuch = wks.Range("A12:H100,V1:W100,AG1:AJ100").Find(strSuch, lookat:=xlPart, LookIn:=xlValues)
End If
With rngSuch
Set rngFound = wks.Range("A12:H100,V1:W100,AG1:AJ100").Find(what:=strSuch, LookIn:=xlValues)
If Not rngFound Is Nothing Then
strFirst = rngFound.Address
Do
FoundAdr = rngFound.Address
ZeSrc = rngFound.Row
ZeDst = wksDst.Cells(Rows.Count, 1).End(xlUp).Row + 1
wks.Range("A11:AJ11").Copy wksDst.Cells(9, 1) 'Überschrift kopieren
ZeDst2 = wksDst.Cells(Rows.Count, 1).End(xlUp).Row + 1
wks.Range("A" & ZeSrc & ":XFD" & ZeSrc).Copy wksDst.Cells(ZeDst2, 1) 'Zeile kopieren
Set rngFound = wks.Range("A12:H100,V1:W100,AG1:AJ100").FindNext(rngFound)
Loop While Not rngFound Is Nothing And rngFound.Address > strFirst
End If

End With
Next

End Sub


Schon mal vorab vielen Dank
Christian

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Suche auf mehreren Tabellenblättern und Übertrag
14.11.2023 14:43:56
Yal
Hallo Christian,

die "Entkomplizierung" kommt als nächste Schritt ;-)

Poste bitte dein Code mithilfe der "Code"-Schaltfläche, sodass die Formatierung den Code lesbarer macht. u.a. schwer zu lesen, wenn das Einrücken verschwindet.
Das mit dem With musst Du noch unter die Lupe nehmen.
Versuche ebenfalls zu verstehen, wie man die Objekt arbeiten kann (rngFound als Zelle, also Range) anstatt nur deren Eigenschaft (.Row)

Die Kopie der Überschrift erfolgt nur einmal pro Blatt, auch wenn mehrere Zeilen in dem Blatt gefunden werden, also ausserhalb der Do-While.
Ich gehe Davon aus, dass deine Blatt "Suche" bis Zeile 8 Befüllt ist. Also Offset(2, 0) wird eine leere Zeile lassen (Zeile 9) dann daraus jede Treffer, dann leere Zeile, Überschrift, usw.

Sub FindenUndKopieren()

Dim wks As Worksheet
Dim wksDst As Worksheet
Dim strSuch As String
Dim rngFound As Range
Dim strFirst As String

ThisWorkbook.Worksheets("Suche").Range("8:20000").Clear
Set wksDst = ThisWorkbook.Worksheets("Tabelle12")
strSuch = Range("A2").Value
If strSuch = "" Then Exit Sub
For Each wks In Worksheets
If wks.Name > "Suche" Then
With wks.Range("A12:H100,V12:W100,AG12:AJ100") 'ab hier und bis End With, alles was mit einem Punkt anfängt, bezieht sich auf diesem Präfix
Set rngFound = .Find(what:=strSuch, lookat:=xlPart, LookIn:=xlValues)
If Not rngFound Is Nothing Then
strFirst = rngFound.Address
wks.Range("A11:AJ11").Copy wksDst.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0) 'Überschrift kopieren, nur einmal pro Blatt
Do
rngFound.EntireRow.Copy wksDst.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 'Zeile kopieren
Set rngFound = .FindNext(rngFound)
Loop While rngFound.Address > strFirst 'wenn einaml was gefunden, kann rngFound nicht Nothing sein
End If
End With
End If
Next
End Sub


VG
Yal
Anzeige
AW: VBA Suche auf mehreren Tabellenblättern und Übertrag
14.11.2023 14:57:22
Christian
Hi Yal,

das mit dem Code einfügen habe ich übersehen -> Sorry.
Ich habe deinen Code mal schnell probiert und er wirft das jetzt so aus, wie ich gehofft habe.
Deine Anmerkungen nehme ich mir zu Herzen, und versuche mal die ganze Problematik (Schleifen, Row, etc.) zu verstehen und umzusetzen. Hoffentlich finde ich morgen Zeit dazu.

Danke aber trotzdem für deine schnelle Hilfe!!!


Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige