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

Übersicht aus mehreren Reitern erstellen

Übersicht aus mehreren Reitern erstellen
24.07.2019 07:33:01
Andreas
Hallo zusammen,
ich kenne mich zwar etwas mit VBA- Programmierung aus, bin aber weit davon entfernt ein Experte zu sein. Sollte es keine Lösung geben werde ich mein Problem mit den bekannten IF, FOR, case, DO UNTIL etc. probieren, aber es müsste meiner Meinung nach viel einfacher umsetzbar sein (Ich hinter denke mich oft :)).
In der Beispiel- Exceldatei möchte ich aus mehreren Reitern einen Wert suchen und die Werte in der Reihe in dem "Übersicht"- Reiter auflisten. Das Makro soll hierbei in dem Reiter "Übersicht" in der Spalte "H" immer den Wert der aktuellen Zelle in den unterschiedlichen Reitern suchen (Anlage4 bis Maschine2) und nachdem der Wert in einem der Reiter gefunden wurde, die Zeile kopieren und dann in Spalte "H" eine Zelle nach unten springen und das gleiche nochmal machen usw. In Spalte "N" sollte der Name des Reiters eingetragen werden, wo der Wert gefunden wurde.
Der Reiter "Allgemeines dient nur zur allgemeinen Info und da muss nicht durchsucht werden
Beispieldatei:
https://www.herber.de/bbs/user/131039.xlsx
Ich hoffe ich habe es halbwegs verständlich ausgedrückt :).
Vorab Danke.
Gruß
Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
24.07.2019 10:32:10
Nepumuk
Hallo Andreas,
teste mal:
Option Explicit
Public Sub Suchen()
Dim lngRow As Long
Dim objWorksheet As Worksheet
Dim objCell As Range
With ThisWorkbook.Worksheets("Übersicht")
For lngRow = 2 To .Cells(.Rows.Count, 8).End(xlUp).Row
For Each objWorksheet In ThisWorkbook.Worksheets
If objWorksheet.Name  "Allgemeines" Then
If objWorksheet.Name  "Übersicht" Then
Set objCell = objWorksheet.Columns(8).Find( _
What:=.Cells(lngRow, 8).Value, LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then
Call objCell.EntireRow.Copy(Destination:=.Cells(lngRow, 1))
.Cells(lngRow, 14).Value = objWorksheet.Name
Set objCell = Nothing
Set objWorksheet = Nothing
Exit For
End If
End If
End If
Next
Next
End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
24.07.2019 13:22:54
Andreas
Hi Nepumuk,
das hat super funktioniert vielen DANK!!!
Jetzt noch eine Frage. Es besteht die Möglichkeit, dass noch mehr Reiter hinzukommen die nicht abgefragt werden sollen. Wie ergänze ich deinen Code damit diese Reiter auch übersprungen werden?
Ich habe folgendes probiert:
....
If objWorksheet.Name "Allgemeines" Then
If objWorksheet.Name "BlaBla" Then
If objWorksheet.Name "Info" Then
...
unten habe ich die End if jeweils ergänzt aber da kommt dann ein Fehler...
Kann es sein das die Reihenfolge der Reiter eine Rolle spielen? Also beispielsweise kommt der Reiter "BlaBla" hinter dem Reiter "Übersicht", muss dann auch im Code diese Reihenfolge eingehalten werden?
Vorab Danke
Gruß
Andreas
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
24.07.2019 13:57:03
Nepumuk
Hallo Andreas,
die Reihenfolge der Tabellen spielt keine Rolle, die Schleife geht immer durch alle Tabellen bis der Suchbegriff gefunden wurde. Wenn du mehrere Tabellen ausschließen willst, dann kannst du das einfacher so machen:
Option Explicit

Public Sub Suchen()
    Dim lngRow As Long
    Dim objWorksheet As Worksheet
    Dim objCell As Range
    With ThisWorkbook.Worksheets("Übersicht")
        For lngRow = 2 To .Cells(.Rows.Count, 8).End(xlUp).Row
            For Each objWorksheet In ThisWorkbook.Worksheets
                Select Case objWorksheet.Name
                    Case "Allgemeines", "Übersicht", "xxx", "yyy", "zzz" 'Hier die Tabellennamen eintragen
                        'do nothing
                    Case Else
                        Set objCell = objWorksheet.Columns(8).Find( _
                            What:=.Cells(lngRow, 8).Value, LookIn:=xlValues, _
                            LookAt:=xlWhole, MatchCase:=False)
                        If Not objCell Is Nothing Then
                            Call objCell.EntireRow.Copy(Destination:=.Cells(lngRow, 1))
                            .Cells(lngRow, 14).Value = objWorksheet.Name
                            Set objCell = Nothing
                            Set objWorksheet = Nothing
                            Exit For
                        End If
                End Select
            Next
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
25.07.2019 07:26:58
Andreas
Hallo Nepumuk,
nochmals vielen Dank!
Wenn du noch willst und etwas Zeit hast würden mich 1-3 Dinge zum Verständnis interessieren :).
Ich habe mal die Zeilen kommentiert was ich denke was dort passiert:
Option Explicit
Public Sub Suchen()
Dim lngRow As Long              'Variablendeklaration
Dim objWorksheet As Worksheet   'Variablendeklaration
Dim objCell As Range            'Variablendeklaration
With ThisWorkbook.Worksheets("Übersicht") 'In diesem Reiter sollen die Daten eingefügt  _
werden
For lngRow = 2 To .Cells(.Rows.Count, 8).End(xlUp).Row 'Starte in Zeile 2 und Spalte 8
For Each objWorksheet In ThisWorkbook.Worksheets 'Jedes Arbeitsblatt soll  _
durchsucht werden
Select Case objWorksheet.Name 'Fall 1 = durchsuche genannte Reiter nicht ||  _
Fall 2 = durchsuche alle bei Fall 1 nicht genannte Reiter
Case "Allgemeines", "Übersicht", "xxx", "yyy", "zzz" 'Hier die  _
Tabellennamen eintragen
'do nothing
Case Else 'Suche aktuellen Wert in Reiter "XYZ" (aktuelle Zeile Spalte 8)
Set objCell = objWorksheet.Columns(8).Find( _
What:=.Cells(lngRow, 8).Value, LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then 'Wenn nichts gefunden wurde sucht er in  _
den anderen Reitern weiter
Call objCell.EntireRow.Copy(Destination:=.Cells(lngRow, 1)) 'Wenn  _
der Wert gefunden wurde dann ganze Zeile einfügen
.Cells(lngRow, 14).Value = objWorksheet.Name 'Name des Reiters wird  _
in Spalte 14 (N) eingetragen
Set objCell = Nothing 'Werte aus "Speicher" - leeren?
Set objWorksheet = Nothing 'Werte aus "Speicher" - leeren?
Exit For
End If
End Select
Next
Next
End With
End Sub

1:
For lngRow = 2 To .Cells(.Rows.Count, 8).End(xlUp).Row
Bedeutet es, dass wirklich die komplette Spalte 8 bis ganz nach unten durchgegangen wird? Oder wo stoppt er? Mit Count werden doch bestimmt Zeilen gezählt...
2:
Mein Arbeitskollege und ich haben festgestellt, dass es hilfreich wäre hinter Spalte 14 (N) Infos/Bemerkungsfelder einzufügen. Damit also nicht immer diese Felder überschrieben werden, sollten jedes mal nur Spalte 1-13 kopiert werden (In Spalte 14 wird ja der Name des Reiters eingetragen). Ich selbst würde es mit der Makroaufzeichnung machen und diese dann anpassen, aber es gibt doch bestimmt einen richtigen Code wie den "entireRow" wo man noch die gewünschten Spalten angeben kann...
3:
Wie kann ich nur die Werte kopieren? Manche Zellen haben Formeln und/oder sind farbig. Ich wollte ".PasteSpecial" an unterschiedlichen Stellen in dieser Zeile "Call objCell.EntireRow.Copy(Destination:=.Cells(lngRow, 1))" einfügen, aber irgendwie funktioniert das nicht so wie ich möchte...
Vorab nochmals vielen Dank für deine Hilfe :)
Gruß
Andreas
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
25.07.2019 09:21:56
Nepumuk
Hallo Andreas,
1. Die Zeile simuliert folgende Aktion: Setze den Cursor in die letzte Zeile der Spalte 8. Drücke Strg+Pfeil nach oben (xlUp) damit landest du in der letzten beschriebenen Zelle der Spalte 8.
2. Erledigt
3. Erledigt
4. Testen:
Option Explicit
Public Sub Suchen()
Dim lngRow As Long              'Variablendeklaration
Dim objWorksheet As Worksheet   'Variablendeklaration
Dim objCell As Range            'Variablendeklaration
With ThisWorkbook.Worksheets("Übersicht") 'In diesem Reiter sollen die Daten eingefügt  _
werden
For lngRow = 2 To .Cells(.Rows.Count, 8).End(xlUp).Row 'Starte in Zeile 2 und Spalte 8
For Each objWorksheet In ThisWorkbook.Worksheets 'Jedes Arbeitsblatt soll  _
durchsucht werden
Select Case objWorksheet.Name 'Fall 1 = durchsuche genannte Reiter nicht ||  _
Fall 2 = durchsuche alle bei Fall 1 nicht genannte Reiter
Case "Allgemeines", "Übersicht", "xxx", "yyy", "zzz" 'Hier die  _
Tabellennamen eintragen
'do nothing
Case Else 'Suche aktuellen Wert in Reiter "XYZ" (aktuelle Zeile Spalte 8)
Set objCell = objWorksheet.Columns(8).Find( _
What:=.Cells(lngRow, 8).Value, LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
If Not objCell Is Nothing Then 'Wenn nichts gefunden wurde sucht er in  _
den anderen Reitern weiter
Call objCell.Offset(0, -7).Resize(1, 13).Copy 'Wenn der Wert  _
gefunden wurde dann Spalte 1-13 kopieren
Call .Cells(lngRow, 1).PasteSpecial(Paste:= _
xlPasteValuesAndNumberFormats) 'Nur Werte und Zahlenformate einfügen
.Cells(lngRow, 14).Value = objWorksheet.Name 'Name des Reiters wird  _
in Spalte 14 (N) eingetragen
Set objCell = Nothing 'Objekt aus "Speicher" - leeren
Set objWorksheet = Nothing 'Object aus "Speicher" - leeren
Exit For
End If
End Select
Next
Next
End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Übersicht aus mehreren Reitern erstellen
25.07.2019 13:19:37
Andreas
Hallo Nepumuk,
1:
Stimmt!!! Konnte da gerade kein Zusammenhang herstellen, aber eigentlich sollte ich den Befehl kennen...
Er fängt quasi von unten an und zählt (läuft) hoch bis Zeile 2.
2 und 3:
So halbwegs war ich auf dem richtigen Weg, aber auf der Zielgeraden habe ich halt doch verkackt ;)
4:
Funktioniert wunderbar! Ich (wir) danken dir vielmals.
Gruß
Andreas
AW: Übersicht aus mehreren Reitern erstellen
24.07.2019 12:54:39
Günther
Moin,
ich würde das wahrscheinlich mit Power Query machen. Also ohne VBA ... ;-)
Gruß
Günther
AW: Übersicht aus mehreren Reitern erstellen
24.07.2019 13:24:40
Andreas
Hi Günther,
das sagt mir jetzt ehrlich gesagt gar nichts :D ?!?!
Muss ich nachher mal Google benutzen :)
Aber danke dir, vll hilft das auch...
Gruß
Andreas
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige