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

Forumthread: VBA: Durchsuchen nach Wert und kopieren von Inhalt

VBA: Durchsuchen nach Wert und kopieren von Inhalt
16.07.2019 08:08:00
Inhalt
Moin zusammen,
bin mit meinen eingeschränkten Kenntnissen nicht weit gekommen und daher auf Hilfe angewiesen.
Im Grunde genommen soll in jedem Tabellenblatt (Eingang1, Eingang2 etc.) dieselbe Spalte E nach zwei Wörtern ("Medium" und "High") durchsucht werden. Bei einem Treffer sind vorher definierte Zellen (z. B. A3, B3 und C3) der betroffenen Zeile in das Tabellenblatt "Lösung" zu kopieren.
In den zu durchsuchenden Tabellenblättern soll die Abfrage der beiden Bedingungen nicht fortlaufend für die ganze Spalte E gelten, sondern partiell. Das heißt, mal soll die Abfrage der Bedingungen für Zeile 3 - 8 gelten und danach bei Zeile 17 - 21 fortgeführt werden etc.). Dieses Vorgehen soll auch für die Übrigen Tabellen (Eingang2 - 10) realisiert werden, jedoch auch mit unterschiedlichen Zeilen.
In der Lösungstabelle sollen die Zeilen fortlaufend und ohne Unterbrechung gelistet werden.
Danke schon Mal für die Zeit im Voraus!
Glückauf
Denis
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
16.07.2019 12:43:32
Inhalt
Hallo Denis,
ohne eine Beispieldatei und ohne Präzisierung geht das leider nicht.
Wie werden denn die zu durchsuchenden Zeilen festgelegt: 3-8, 17-21, etc.?
Gibt es ein Kriterium, welches die zu durchsuchenden Zeilen kennzeichnet?
Viele Grüße
Dieter
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
16.07.2019 13:14:53
Inhalt
Du hast natürlich recht! Schau mal, ob die Datei bei der Präzisierung weiter hilft.
Das mit dem Upload habe ich wohl mit dem Link nicht ganz verstanden... Vielleicht klappts ja jetzt. Hier der Link:
https://www.herber.de/bbs/user/130933.xlsx
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
16.07.2019 15:59:25
Inhalt
Hallo Denis,
damit komme ich (fast) zurecht. Ggf. musst du noch bei Spalte D (Blatt "Lösung") nachbessern.
Ansonsten sollte das mit dem folgenden Programm gehen:
Sub Auswertung()
Dim ersterFund As String
Dim letzteZeileL As Long
Dim suchErgebnis As Object
Dim wb As Workbook
Dim wsE As Worksheet ' Eingangsblätter (nacheinander)
Dim wsL As Worksheet ' Lösungsblatt
Dim zeileE As Long
Dim zeileL As Long
Set wb = ThisWorkbook
Set wsL = wb.Worksheets("Lösung")
letzteZeileL = wsL.Cells(wsL.Rows.Count, "A").End(xlUp).Row
If letzteZeileL > 1 Then
wsL.Rows(2).Resize(letzteZeileL - 1).ClearContents
End If
zeileL = 2
For Each wsE In wb.Worksheets
If Left$(UCase$(wsE.Name), 7) = "EINGANG" Then
Set suchErgebnis = wsE.Columns("A").Find(What:="ID No.", _
LookAt:=xlWhole)
If Not suchErgebnis Is Nothing Then
ersterFund = suchErgebnis.Address
Do
zeileE = suchErgebnis.Row + 1
Do Until IsEmpty(wsE.Cells(zeileE, "A"))
If wsE.Cells(zeileE, "E") = "high" Or _
wsE.Cells(zeileE, "E") = "medium" Then
wsL.Cells(zeileL, "A") = wsE.Name
wsL.Cells(zeileL, "B") = wsE.Cells(zeileE, "A") ' Id No.
wsL.Cells(zeileL, "C") = wsE.Cells(zeileE, "B") ' Question
wsL.Cells(zeileL, "D") = wsE.Cells(zeileE, "E") ' ?
wsL.Cells(zeileL, "E") = wsE.Cells(zeileE, "C") ' Remark
zeileL = zeileL + 1
End If
zeileE = zeileE + 1
Loop
Set suchErgebnis = wsE.Columns("A").FindNext(After:=suchErgebnis)
Loop While Not suchErgebnis Is Nothing And suchErgebnis.Address  ersterFund
End If
End If
Next wsE
End Sub
Du startest das Programm durch Klick auf die Schaltfläche "Start" im Blatt "Lösung".
https://www.herber.de/bbs/user/130936.xlsm
Viele Grüße
Dieter
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
17.07.2019 08:40:05
Inhalt
Hallo Dieter,
herzlichen Dank für die schnelle Lösung. Ich bin begeistert, dass dies realisiert werden kann!
Was würde sich in der Formel ändern, wenn die Registerblätter nicht die Namen: Eingang1 etc. haben, sondern stetig ändernde wie z.B.: Regional, Neighbourhood, Technical, Infrastructure, Personnel, Organizational. Das Lösungsblatt soll außerdem Summary heißen.
Die Abfrage könnte jetzt sogar fortlaufend für die Spalte P sein, da ich in allen Blättern etwas umgestellt habe. Ist dies relevant für die Formel? Reicht esw aus lediglich den Buchstaben "E" auf "P" im Makro zu ändern?
Hier zur Sicherheit die angepasste Datei:
https://www.herber.de/bbs/user/130949.xlsx
Schöne Grüße
Denis
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
17.07.2019 15:25:16
Inhalt
Hallo Denis,
du brauchst natürlich für diejenigen Tabellenblätter, die als Datenlieferanten dienen ein eindeutiges Kriterium. Schließlich hast du ja auch noch Hilfsblätter in deiner Arbeitsmappe.
Ich habe das Programm jetzt so abgeändert, dass alle Blätter genommen werden, bei denen in A2 der Text "ID No." und in B2 der Text "List of Questions" steht. Die Spalten, aus denen gelesen wird, habe ich ebenfalls geändert.
In deiner neuen Datei gibt es ja pro Blatt nur noch einen Fragenblock. Ich habe trotzdem die Do-Schleife mit FindNext gelassen. Sie funktioniert natürlich auch für den Fall mit nur einem Block und vielleicht kommen weitere Blöcke hinzu.
Sub Auswertung()
Dim ersterFund As String
Dim letztezeileS As Long
Dim suchErgebnis As Object
Dim wb As Workbook
Dim wsE As Worksheet ' Blätter mit Eingabedaten (nacheinander)
Dim wsS As Worksheet ' Blatt "Summary"
Dim zeileE As Long
Dim zeileS As Long
Set wb = ThisWorkbook
Set wsS = wb.Worksheets("Summary")
letztezeileS = wsS.Cells(wsS.Rows.Count, "A").End(xlUp).Row
If letztezeileS > 1 Then
wsS.Rows(2).Resize(letztezeileS - 1).ClearContents
End If
zeileS = 2
For Each wsE In wb.Worksheets
If wsE.Range("A2") = "ID No." And _
wsE.Range("B2") = "List of Questions" Then
Set suchErgebnis = wsE.Columns("A").Find(What:="ID No.", _
LookAt:=xlWhole)
If Not suchErgebnis Is Nothing Then
ersterFund = suchErgebnis.Address
Do
zeileE = suchErgebnis.Row + 1
Do Until IsEmpty(wsE.Cells(zeileE, "A"))
If wsE.Cells(zeileE, "P") = "high" Or _
wsE.Cells(zeileE, "P") = "medium" Then
wsS.Cells(zeileS, "A") = wsE.Name
wsS.Cells(zeileS, "B") = wsE.Cells(zeileE, "A") ' Id No.
wsS.Cells(zeileS, "C") = wsE.Cells(zeileE, "B") ' Question
wsS.Cells(zeileS, "D") = wsE.Cells(zeileE, "P") ' Benchmark
wsS.Cells(zeileS, "E") = wsE.Cells(zeileE, "M") ' Remark
zeileS = zeileS + 1
End If
zeileE = zeileE + 1
Loop
Set suchErgebnis = wsE.Columns("A").FindNext(After:=suchErgebnis)
Loop While Not suchErgebnis Is Nothing And suchErgebnis.Address  ersterFund
End If
End If
Next wsE
End Sub
https://www.herber.de/bbs/user/130961.xlsm
Viele Grüße
Dieter
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
18.07.2019 16:46:11
Inhalt
Hallo Dieter,
ich bin total begeistert! Unfassbar für mich, dass Du es so umgesetzt hast, wie ich es mir vorgestellt hab. Herzlichen Dank!
Schöne Grüße und Glückauf
Denis
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
19.07.2019 10:25:20
Inhalt
Hallo Dennis,
vielen Dank für deine freundliche Rückmeldung.
VBA kann man übrigens lernen:
https://www.vhs-herne.de/kurssuche/kurs/Bildungsurlaub+VBA-Programmierung/nr/19B4513/bereich/details/#inhalt
(Dein "Glückauf" klang ja so, als könntest du aus dem Revier sein).
Viele Grüße und weiterhin viel Erfolg
Dieter
Anzeige
AW: VBA: Durchsuchen nach Wert und kopieren von Inhalt
19.07.2019 15:13:19
Inhalt
Leider fehlt mir die Zeit für das Lernen von VBA...
Sehr gut kombiniert ;)
Schönes Wochenende
Denis
;

Forumthreads zu verwandten Themen

Anzeige
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: Durchsuchen und Kopieren von Werten in Excel


Schritt-für-Schritt-Anleitung

Um in Excel nach bestimmten Werten zu suchen und diese zu kopieren, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du dies umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub Auswertung()
    Dim ersterFund As String
    Dim letzteZeileL As Long
    Dim suchErgebnis As Object
    Dim wb As Workbook
    Dim wsE As Worksheet ' Eingangsblätter (nacheinander)
    Dim wsL As Worksheet ' Lösungsblatt
    Dim zeileE As Long
    Dim zeileL As Long

    Set wb = ThisWorkbook
    Set wsL = wb.Worksheets("Lösung")
    letzteZeileL = wsL.Cells(wsL.Rows.Count, "A").End(xlUp).Row

    If letzteZeileL > 1 Then
        wsL.Rows(2).Resize(letzteZeileL - 1).ClearContents
    End If

    zeileL = 2
    For Each wsE In wb.Worksheets
        If Left$(UCase$(wsE.Name), 7) = "EINGANG" Then
            Set suchErgebnis = wsE.Columns("A").Find(What:="ID No.", LookAt:=xlWhole)
            If Not suchErgebnis Is Nothing Then
                ersterFund = suchErgebnis.Address
                Do
                    zeileE = suchErgebnis.Row + 1
                    Do Until IsEmpty(wsE.Cells(zeileE, "A"))
                        If wsE.Cells(zeileE, "E") = "high" Or wsE.Cells(zeileE, "E") = "medium" Then
                            wsL.Cells(zeileL, "A") = wsE.Name
                            wsL.Cells(zeileL, "B") = wsE.Cells(zeileE, "A") ' Id No.
                            wsL.Cells(zeileL, "C") = wsE.Cells(zeileE, "B") ' Frage
                            wsL.Cells(zeileL, "D") = wsE.Cells(zeileE, "E") ' ?
                            wsL.Cells(zeileL, "E") = wsE.Cells(zeileE, "C") ' Bemerkung
                            zeileL = zeileL + 1
                        End If
                        zeileE = zeileE + 1
                    Loop
                    Set suchErgebnis = wsE.Columns("A").FindNext(After:=suchErgebnis)
                Loop While Not suchErgebnis Is Nothing And suchErgebnis.Address <> ersterFund
            End If
        End If
    Next wsE
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Erstelle einen Button im Arbeitsblatt „Lösung“, um das Makro zu starten. Klicke dazu auf „Entwicklertools“ -> „Einfügen“ -> „Button“.
  3. Weise dem Button das Makro Auswertung zu.

Jetzt kannst Du das Makro ausführen, um die gewünschten Werte zu durchsuchen und zu kopieren.


Häufige Fehler und Lösungen

  • Problem: Das Makro findet keine Werte.

    • Lösung: Stelle sicher, dass die Spalte E tatsächlich die Werte "high" oder "medium" enthält und dass die Eingangsblätter korrekt benannt sind (z.B. Eingang1, Eingang2).
  • Problem: Der Button funktioniert nicht.

    • Lösung: Überprüfe, ob das Makro korrekt zugewiesen wurde und ob du in der richtigen Arbeitsmappe arbeitest.

Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, kannst Du auch Excel-Formeln verwenden, um die Werte zu suchen und zu kopieren. Eine Kombination aus WVERWEIS und FILTER kann hier hilfreich sein. Das ist allerdings weniger flexibel und erfordert manuelle Anpassungen.


Praktische Beispiele

Ein Beispiel für das Kopieren von Daten aus mehreren Tabellen:

  • Du hast mehrere Blätter (Eingang1, Eingang2, …) und möchtest die Werte in einem neuen Blatt namens „Lösung“ konsolidieren.
  • Verwende die oben genannte VBA-Methode, um die gewünschten Werte in die „Lösung“ zu übertragen.

Wenn Du die Blattnamen änderst, z.B. in „Regional“ oder „Technical“, musst Du nur die Bedingungen im VBA-Code anpassen.


Tipps für Profis

  • Nutze die Debug.Print-Funktion im Code, um den Fortschritt und die gefundenen Werte während der Ausführung des Makros zu überwachen.
  • Halte Deine Arbeitsmappe gut organisiert, insbesondere wenn Du viele Eingangsblätter hast. Das erleichtert die Verwaltung und das Suchen nach Werten.

FAQ: Häufige Fragen

1. Frage
Kann ich das Makro anpassen, um andere Spalten zu durchsuchen?
Ja, Du musst lediglich die Spaltenbezeichnung im Code anpassen, zum Beispiel von "E" auf "P".

2. Frage
Wo kann ich mehr über VBA lernen?
Eine gute Anlaufstelle ist die vhs herne kurssuche, wo Du Kurse zur VBA-Programmierung finden kannst.

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