VBA suchen und kopieren

Hallo Zusammen,

muss wieder für eine Datenanalyse ein makro basteln.
Also:
Meine Excel(Tabelle 1) geht von Spalte A bis S. In Spalte A stehen Namen und in spalte P und Q meine „suchwörter“. Habe die Suchwörter in Spalte S verbunden. Zum Beispiel steht nun in Spalte S: „SystemOffice“(zusammengefügt aus spalte p und q)

Was soll das Makro nun bewerkstelligen?

  1. Suche in Spalte P nach dem suchwort „NAME“ und kopiere alle darunter liegende Zeilen (inkl der Zeile in dem „Name“ steht) bis in Spalte P das Wort „System“ steht.

  2. Suche in Spalte S nach den suchwörtern die im Tabelle 2 in Spalte A2:A30 stehen und kopiere alle darunter liegende Zeilen (inkl der Zeile in dem das suchwort steht).Beende das Kopieren wenn in Spalte P „system“ steht.

Ich hoffe ich konnte mich verständlich genug ausdrücken Vorab vielen Dank : ) für die Hilfe

zunächst mal folgender ansatz für aufgabe 1:

Sub x()
With Range(„p:stuck_out_tongue:“)
Range(.Find(„NAME“), .Find(„System“)).EntireRow.Select
End With
End Sub

wenn du statt „Select“ „Copy“ schreibst, ist der bereich, den du beschreibst, in der zwischenablage.

allerdings habe ich noch nicht verstanden, was genau wohin kopiert werden soll. wenn das geklärt ist, mache ich mich an aufgabe 2.

Hallo ascanpetersen,

vielen dank für deine hilfe! Also als nächstes sollen suchwörter (die in Tabellenblatt 2 stehen(in zeile a1:a30))
in der Spalte S gesucht werden. wenn das suchwort gefunden wurde dann soll wie in aufgabe eins die zeile und die darunter liegenden zeilen kopiert werden bis das wort system in spalte p steht, kopiert werden.
Die zeilen sollen alle in Tabellenblatt 3 ausgeworfen werden.

Hoffe ich war einiger maßen verständlich…
gerne kann ich auch eine bsp excel zu senden

Sub x()
With Range(„p:stuck_out_tongue:“)
Range(.Find(„NAME“), .Find(„System“)).EntireRow.Select
End With
End Sub

wenn du statt „Select“ „Copy“ schreibst, ist der bereich, den
du beschreibst, in der zwischenablage.

allerdings habe ich noch nicht verstanden, was genau wohin
kopiert werden soll. wenn das geklärt ist, mache ich mich an
aufgabe 2.

aufgabe 1:

Sub x()
With Range(„p:stuck_out_tongue:“)
Range(.Find(„NAME“), .Find(„System“)).EntireRow.Copy _
(Worksheets(„Tabelle3“).Cells(1, 1))
End With
End Sub

kann es vorkommen, daß „system“ über „NAME“ steht?
steht „system“ 1x oder mehrmals in spalte p?
melde mich morgen wieder.

also zwei dinge name steht öffter drin das bedeutet es müsste eine schleife sein damit ich alle bekomme und system steht öfter drin. da die perosonen auf verschiedene systeme geschlüsselt sind.

danke!

Hi,

ich habe nicht ganz verstanden, was Du erreichen möchtest.

Aber schau doch mal unter Daten > Filter > Spezialfilter. Mit diesem Befehl kannst Du aus Deiner Liste selektiv Datensätze an neine andere Stelle kopieren lassen. Es sind komplexe Kriterien möglich. Die Suchkriterien müssen in einem eigenen Tabellenbereich stehen (es bietet sich an, eine Kopie der Listenüberschriften zu erstellen und darunter die Suchkriterien einzutippen).
Die Suche läßt man „an eine andere Stelle“ filtern. Die Daten werden tatsächlich dort hinkopiert. Wenn Du das Suchergebnis erneut sortierst, kannst Du alles, was unterhalt von System steht, löschen.

Den Vorgang würde ich erst einmal trocken üben, bis genau das gewünschte Suchergebnis entsteht, und dann ein Makro aufzeichnen.

Alternativ beschäftige Dich mit Pivottabellen. Davon verstehe ich nichts. Aber Thomas Ramel (der hiesige Moderator) hat einleuchtende Beispiele auf seiner Homepage (ich weiß nicht genau, wo die ist, aber wenn Du hier im Forum nach Quickline und Ramel suchst, solltest Du schnell auf den Link kommen).

HTH.

Markus

Hallo m.judoka,
mit deiner Fragestellung, respektive den Daten komme ich absolut nicht klar.
Was willst du eigentlich?
Willst du was suchen, oder sortieren, oder was?
Zur Datenanalyse gibt es den Sverweis, welcher sehr gut ist.
Schicke mir doch mal deine Tabelle und beschreibe dein Problem, dann kann ich vielleicht besser helfen.

[email protected]

mfg
Softoldi

Hallo,

sorry, verstehe die Aufgabenstellung nicht.

Bräuchte etwas mehr Input über die Inhalte der Tabelle1 und Tabelle2.

schönen Gruß
Stefan

habe dir eine datei zu gesendet

Danke dir! brauche aber eine VBA lösung.: )

Hallo Stefan,

könnte dir eine beispielsdatei zu senden… denke das es dann klar wird.

Lieben Gruß

Bitte die Datei an sklinger (at) freenet.de schicken. Ein paar zusätzliche Definitionen wären noch hilfreich.

Hallo m.,judoka,

dieser kommentierte Quellcode würde mit entsprechender Anpassung für 1) und 2) funktionieren. Leider hattest du nicht angegeben, wohin kopiert werden soll. Die Einfügen-Routine muss also noch ergänzt werden:

Dim Zelle As Object

Sub Suchen()
'Für ganze Spalte S ausführen
For Each Zelle In Range(„S:S“)
'Nach „Name“ suchen
If Zelle.Value = „NAME“ Then
'Fundort addressieren
anfang = Zelle.Address
'Fundort auswählen
Range(anfang).Select
'Nach „System“ suchen
Do While ActiveCell.Value „SYSTEM“
'Eine Zeile weiterspringen
ActiveCell.Offset(1, 0).Select
Loop
'Zelle über Fundort addressieren
ende = ActiveCell.Offset(-1, 0).Address
'Zu kopierende Zeilen auswählen
Range(anfang, ende).EntireRow.Select
'Kopieren
Selection.Copy

'Hier muss jetzt noch eingefügt werden, wohin kopiert werden soll.
'Achtung: Es muss berücksichtigt werden, dass das Suchen und Kopieren
'für alle Fundorte von „Name“ ausgeführt wird! Es müssen also evtl. mehrere Ziele
'angegeben werden

End If
Next

Hoffe, das hilft dir weiter.

Gruß
Natator

Hallo m.judoka,

  1. Suche in Spalte P nach dem suchwort „NAME“ und kopiere alle

Soll ganzes Wort oder Teilwort in den Zellen gesucht werden?

  1. Suche in Spalte S nach den suchwörtern

Soll ganzes Wort oder Teilwort in den Zellen gesucht werden?

die im Tabelle 2 in
Spalte A2:A30 stehen und kopiere alle darunter liegende Zeilen
(inkl der Zeile in dem das suchwort steht).Beende das Kopieren

Wohin sollen die gefundenen Zeilen kopiert werden?

Gruß
Franz

Hallo Franz,

gerne kann ich dir eine Beispielsexcel zu kommen lassen. Das Verständniss wird dann einfacher :smile:

Dim spalteP As Range, spalteS As Range, gefunden As Range, ziel As Range, zelle As Range

Sub x()

With Worksheets(„Tabelle1“)
Set spalteP = .Range(„P:stuck_out_tongue:“)
Set spalteS = .Range(„S:S“)
End With

With Worksheets(„Tabelle3“)
.Cells.ClearContents

Set gefunden = spalteP.Find(„NAME“)
Range(gefunden, spalteP.Find(„System“, gefunden)).EntireRow.Copy .Cells(1, 1)
Set ziel = .Cells(.UsedRange.Rows.Count + 1, 1)

For Each zelle In Worksheets(„Tabelle2“).Range(„A2:A3“)
Set gefunden = spalteS.Find(zelle.Text).Offset(0, -3)
Range(gefunden, spalteP.Find(„System“, gefunden)).EntireRow.Copy ziel
Set ziel = .Cells(.UsedRange.Rows.Count + 1, 1)
Next zelle

End With
End Sub

kleine korrekturen:

Sub x()

Dim spalteP As Range, spalteS As Range, _
gefunden As Range, ziel As Range, zelle As Range

With Worksheets(„Tabelle1“)
Set spalteP = .Range(„P:stuck_out_tongue:“)
Set spalteS = .Range(„S:S“)
End With

With Worksheets(„Tabelle3“)
.Cells.ClearContents

Set gefunden = spalteP.Find(„NAME“)
Range(gefunden, spalteP.Find(„System“, gefunden)).EntireRow.Copy .Cells(1, 1)
Set ziel = .Cells(.UsedRange.Rows.Count + 1, 1)

For Each zelle In Worksheets(„Tabelle2“).Range(„A2:A30“)
Set gefunden = spalteS.Find(zelle.Text).Offset(0, -3)
Range(gefunden, spalteP.Find(„System“, gefunden)).EntireRow.Copy ziel
Set ziel = .Cells(.UsedRange.Rows.Count + 1, 1)
Next zelle

End With
End Sub

Hallo,

leider fehlt die Angabe, wo was hinkopiert werden soll! Man kann zwar fleissig die Zeilen unter dem gefundenen Namen kopieren (inkl. der „Namenszeile“), aber wohin?

Sollen bei 2) die Suchwörter nacheinander abgearbeitet werden?

Ansonsten sind die Zauberwörter:
Schleife (FOR-Schleife oder WHILE-Schleife sollte hier genügen) und ggf. ein Zeilenindex (nenne ihn i oder Zeile). Der Vergleich dann mit IF … THEN…ELSE.

Ich hoffe, das hilft erst einmal?

Moin, moin!

Eine komplette Lösung kann ich Dir nicht präsentieren, aber dieser Codeschnipsel zeigt wie man eine Suche durchführt, aus dem Ergebnis Adressen erzeugt, kopiert und einfügt.

Ich hoffe, das hilft Dir weiter.

Den Code hatte ich vergessen:

Dim rngHelp As Range
Dim strAdresse As String
Dim intOldRow As Integer

Sheets(strSheet).Activate
Sheets(strSheet).Range(„A2“).Select
Set rngHelp = Sheets(strSheet).Cells.Find(What:=Target.Value, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
strAdresse = „B“ & rngHelp.Row & „:G“ & rngHelp.Row
Sheets(strSheet).Range(strAdresse).Select
Application.CutCopyMode = False
Selection.Copy
Sheets(„Beantragung“).Activate
Sheets(„Beantragung“).Select
strAdresse = „B“ & Target.Row & „:G“ & Target.Row
Range(strAdresse).Select
Range(strAdresse).PasteSpecial xlPasteValues

strAdresse = Target.Row + 1 & „:“ & Target.Row + 1
Rows(strAdresse).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove