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

Forumthread: VBA worksheet abfrage

VBA worksheet abfrage
30.07.2014 12:58:13
David
Hallo,
ich hoffe ich bin hier richtig mit meinem Problem und hoffe dass jemand einen Lösungsansatz für mich hat.
Ich bin dabei ein Formular in VBA zu erstellen, mit dem man mehrere Arbeitsblätter durchsucht und wenn in einer bestimmten Spalte ein bestimmter Wert ist, soll die komplette Zeile, in der die Zahl steht, auf ein neues Arbeitsblatt übertragen werden.
Aber anstatt nur in Tabelle 1 zu gucken sollen alle Arbeitsblätter (sind ca 100) durchsucht werden.
Hat jemand vielleicht eine Idee wie das dann geschrieben wird?
Mein Code bisher:
Sub test()
Dim a As Long, i As Long
Application.ScreenUpdating = False
a = 2
For i = 1 To 10000
With Worksheets("Tabelle1")
If .Cells(i, "G") = "1" Then
Worksheets("Tabelle2").Cells(a, 1).Value = Worksheets("Tabelle1").Cells(i, 1).Value
Worksheets("Tabelle2").Cells(a, 2).Value = Worksheets("Tabelle1").Cells(i, 2).Value
Worksheets("Tabelle2").Cells(a, 3).Value = Worksheets("Tabelle1").Cells(i, 5).Value
a = a + 1
Else
End If
End With
Next i
Application.ScreenUpdating = True
End Sub

MfG und Danke im vorraus

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA worksheet abfrage
30.07.2014 13:11:25
Robert
Hallo David,
Option Explicit
Dim sh As Worksheet
Dim Output As Worksheet
Dim i As Integer
Dim SuchSpalte As Integer
Dim SuchWert As String
Private Sub test()
SuchSpalte = 1
SuchWert = "Suchwert"
Set Output = Tabelle1
For Each sh In Worksheets
If sh.Name  Output.Name Then
For i = 1 To sh.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If sh.Cells(i, SuchSpalte) = SuchWert Then
sh.Rows(i).Copy
Output.Cells(Output.UsedRange.SpecialCells(xlCellTypeLastCell).Row, 1).PasteSpecial
End If
Next i
End If
Next sh
End Sub
Bei Fragen einfach melden :)
Viele Grüße
Robert

Anzeige
Ungetestet
30.07.2014 13:13:11
Jack_d
Aber so könnte es aussehen
(Sucht Wert der verschiedenen Zellen in Tabelle 1 in allen tabellen)[ausser in sich selbst]

Sub test()
Dim a As Long, i As Long
Dim wrk As Workbook
Dim sht As Worksheet
Application.ScreenUpdating = False
a = 2
For i = 1 To 10000
With Worksheets("Tabelle1")
If .Cells(i, "G") = "1" Then
For Each sht In wrk.Worksheets
If sht.name = "Tabelle1" Then
Else
With sht
.Cells(a, 1).Value = Worksheets("Tabelle1").Cells(i, 1).Value
.Cells(a, 2).Value = Worksheets("Tabelle1").Cells(i, 2).Value
.Cells(a, 3).Value = Worksheets("Tabelle1").Cells(i, 5).Value
a = a + 1
End With
End If
Next sht
Else
End If
End With
Next i
Application.ScreenUpdating = True
End Sub
Grüße

Anzeige
AW: VBA worksheet abfrage
30.07.2014 13:13:49
Rudi
Hallo,
Sub test()
Dim a As Long, i As Long
Dim wks As Worksheet
Application.ScreenUpdating = False
a = 2
For Each wks In Worksheets
If wks.Name  "Tabelle2" Then
With wks
For i = 1 To 10000
If .Cells(i, "G") = "1" Then
.Rows(i).Copy Sheets("Tabelle2").Cells(a, 1)
a = a + 1
End If
Next i
End With
End If
Next
End Sub

Gruß
Rudi

Anzeige
AW: VBA worksheet abfrage
30.07.2014 13:27:30
fcs
Hallo David,
da muss dann noch eine Schleife über alle Worksheets integriert werden.
Innerhalb der Schleife müssen dann noch die Blätter übersprungen werden, die nicht durchsucht werden sollen.
Gruß
Franz
Sub test()
Dim a As Long, i As Long
Dim wksZiel As Worksheet, wksQuelle As Worksheet
Set wksZiel = ActiveWorkbook.Worksheets("Tabelle2")
Application.ScreenUpdating = False
a = 2
For Each wksQuelle In ActiveWorkbook.Worksheets
Select Case wksQuelle.Name
Case wksZiel.Name, "TabeleABCXYZ"
'diese Blätter nicht durchsuchen
Case Else
With wksQuelle
For i = 1 To .Cells(.Rows.Count, 7).End(xlUp).Row
If .Cells(i, "G") = "1" Then
wksZiel.Cells(a, 1).Value = .Cells(i, 1).Value
wksZiel.Cells(a, 2).Value = .Cells(i, 2).Value
wksZiel.Cells(a, 3).Value = .Cells(i, 5).Value
a = a + 1
Else
End If
Next i
End With
End Select
Next wksQuelle
Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA worksheet abfrage
30.07.2014 14:05:18
David
Erstmal einmal ein großes Dankeschön an die schnellen Helfer.
Ich hab die Lösung von "fcs" verwendet und diese funktioniert sehr toll.
Ein Problem habe ich jetzt noch:
Wie kann ich die Formatierung der Zeilen/Spalten in das ausgebende Arbeitsblatt übernehmen?
MfG

AW: VBA worksheet abfrage
30.07.2014 14:44:35
fcs
Hallo David,
wenn möglich dann formatiere die kompletten Spalten in der Zieltabelle in den gewünschten Formaten oder kopiere die Formate aus einer Datentabelle in die Zieltabelle.
wenn zusätzlich individuelle Zellformate übertragen werden sollen, dann muss man die Zellen kopieren statt nur die Werte zu übertragen.
'Wenn in den Quell-Zellen keine Formeln sind
.Range(.Cells(i, 1), .Cells(i, 2)).Copy wksZiel.Cells(a, 1)
.Cells(i, 5).Copy wksZiel.Cells(a, 3)
'Wenn in den Quell-Zellen Formeln stehen
.Range(.Cells(i, 1), .Cells(i, 2)).Copy
With wksZiel.Cells(a, 1)
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
.Cells(i, 5).Copy
With wksZiel.Cells(a, 3)
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False

Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
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 Worksheet Abfrage: Mehrere Arbeitsblätter durchsuchen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul einfügen: Klicke im Menü auf Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub test()
       Dim a As Long, i As Long
       Dim wksZiel As Worksheet
       Dim wksQuelle As Worksheet
       Set wksZiel = ActiveWorkbook.Worksheets("Tabelle2")
       Application.ScreenUpdating = False
       a = 2
       For Each wksQuelle In ActiveWorkbook.Worksheets
           Select Case wksQuelle.Name
               Case wksZiel.Name, "TabelleABCXYZ" ' Diese Blätter nicht durchsuchen
               Case Else
                   With wksQuelle
                       For i = 1 To .Cells(.Rows.Count, 7).End(xlUp).Row
                           If .Cells(i, "G") = "1" Then
                               wksZiel.Cells(a, 1).Value = .Cells(i, 1).Value
                               wksZiel.Cells(a, 2).Value = .Cells(i, 2).Value
                               wksZiel.Cells(a, 3).Value = .Cells(i, 5).Value
                               a = a + 1
                           End If
                       Next i
                   End With
           End Select
       Next wksQuelle
       Application.ScreenUpdating = True
    End Sub
  4. Code anpassen: Stelle sicher, dass du den Namen des Zielblattes (Tabelle2) und die Suchbedingungen anpasst.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehlermeldung bei Blattnamen: Achte darauf, dass die Blattnamen korrekt sind. Ein Tippfehler kann dazu führen, dass das Makro nicht funktioniert.

  • Leere Zeilen: Wenn keine Werte gefunden werden, überprüfe, ob die Suchbedingung im Code richtig gesetzt ist.

  • Aktives Blatt: Stelle sicher, dass das korrekte Arbeitsbuch aktiv ist, wenn du das Makro ausführst.


Alternative Methoden

  • Excel-Funktionen: Du kannst auch die Funktion SVERWEIS() oder FILTER() verwenden, um Daten aus mehreren Blättern zu extrahieren, wenn du keine VBA-Lösung verwenden möchtest.

  • Power Query: Eine weitere Möglichkeit ist die Verwendung von Power Query, um Daten aus verschiedenen Arbeitsblättern zu kombinieren.


Praktische Beispiele

  • Beispiel für einen VBA-Code: Wenn du die Zeilen mit einem bestimmten Wert in Spalte G suchst, kannst du den obigen Code verwenden, um die entsprechenden Daten zu kopieren.

  • Formatierung übernehmen: Um die Formatierung von Zellen zu übernehmen, kannst du den PasteSpecial-Befehl verwenden, wie im folgenden Beispiel:

    .Range(.Cells(i, 1), .Cells(i, 2)).Copy wksZiel.Cells(a, 1)
    wksZiel.Cells(a, 1).PasteSpecial Paste:=xlPasteFormats

Tipps für Profis

  • Optimierung der Laufzeit: Verwende Application.ScreenUpdating = False, um die Laufzeit des Makros zu optimieren, insbesondere bei großen Datensätzen.

  • Verwendung von With: Nutze With Worksheets("Tabelle1"), um den Code lesbarer und effizienter zu gestalten.

  • Debugging: Verwende Debug.Print, um den Fortschritt deines Makros während der Ausführung zu überwachen, besonders wenn du mit mehreren Blättern arbeitest.


FAQ: Häufige Fragen

1. Wie kann ich das Zielblatt dynamisch festlegen?
Du kannst das Zielblatt in einer Variable speichern und bei Bedarf ändern.

2. Kann ich das Makro auf bestimmte Blätter beschränken?
Ja, indem du die Select Case-Anweisung im Code anpasst, kannst du festlegen, welche Blätter durchsucht werden sollen.

3. Wie übernehme ich die Formatierung der Zellen?
Verwende den Copy-Befehl gefolgt von PasteSpecial, um sowohl Werte als auch Formate zu übertragen.

4. Funktioniert das auch in älteren Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, solange die VBA-Umgebung verfügbar ist.

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