Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Excel: Filtern und in neues Dokument kopieren





Frage

Hallo zusammen ich möchte gerne Folgendes machen: aus einer Excel-Tabelle möchte ich zuerst einmal nach bestimmen Wörtern, bzw. Buchstabenfolgen suchen. Dies ist ja möglich über "Suchen" und "Alle suchen". Wenn ich nun 200 Datensätze mit dem Kriterium gefunden habe, wie kann ich die in eine neues Dokument kopieren? Copy-Paste funktioniert nicht! Kann mir jemand ausserdem sagen, wie ich zum Beispiel nach Wörtern suchen kann, wo eine Variable drin vorkommt? Also wenn ich zum Beispiel "spiele" und "spielst" haben möchte, wie muss ich dann suchen? "spiel" plus was? Besten Dank für jegliche Hinweise!

Antwort 1 von JoeKe

Hallo suki,

das lässt sich mit VBA machen. Kopiere dazu folgenden Code in ein Standartmodul.

Sub suchen_kopieren()
Application.ScreenUpdating = False
Dim Begriff As String, gefunden As Variant, firstAddress As Variant
Begriff = InputBox("suche nach:", "Suchbegriff")
If Begriff = "" Then Exit Sub
With Worksheets(1).Cells
Set gefunden = .Find(Begriff, LookIn:=xlValues)
If Not gefunden Is Nothing Then
firstAddress = gefunden.Address
Do
gefunden.Copy
Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
Set gefunden = .FindNext(gefunden)
Loop While Not gefunden Is Nothing And gefunden.Address <> firstAddress
End If
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Es genügt das Wort "spiel", wie übrigens bei suchen auch, in die Inputbox einzugeben und mit OK bestätigen. Danach werden alle Wörter die "spiel" enthalten in die zweite Tabelle kopiert.

MfG

JöKe

Antwort 2 von suki

danke für die Hilfe!
Rückfrage: was ist vba?
Bzw. was muss ich mit dieser langen Formel anstellen?
Was ist, wenn ich ein Wort suchen will,
das mit N beginnt und mit D endet,
dazwischen sollen dann A, E, I oder U?
Wie gibt man das ein?

Grüsse!

Antwort 3 von suki

Ok, ich habe die Formel jetzt in den Visual Basic Editor reinkopiert, aber was muss ich jetzt in meinem Excel-Dokument machen?

Antwort 4 von JoeKe

Hallo suki,

Visual Basic for Applications (VBA) von Microsoft ist eine aus dem von Microsoft entwickelten Basic-Dialekt Visual Basic (VB) abgeleitete Skriptsprache, die zur Steuerung von Programmabläufen in den Microsoft Office-Programmen entwickelt wurde. VBA ist damit der Nachfolger der verschiedenen Makrosprachen in den MS Office-Anwendungen.

Um den obenstehenden Code verwenden zu können, muss er in die VBA-Umgebung eingefügt werden.

    VBA-Umgebung mit ALT+F11 öffnen
    Es sollten zwei Fenster zu sehen sein. Das linke ist der Projekt-Explorer, falls dieser nicht da ist mit STRG+r öffnen; dort klickst du mit rechts auf "VBA-Projekt(Name deiner Mappe) und wählst Einfügen=>Modul.
    In dem sich darauf sich öffnenden Fenster (rechts) kopierst du den Code hinein.
    Mit ALT+F11 von der VBA-Umgebung wieder zu Excel wechseln.


Um den Code auszuführen ALT+F8 drücken in dem sich öffnenden Fenster das Makro suchen (dürfte bei dir nur eins vorhanden sein) das anklicken und anschließend auf ausführen klicken.

Das zweite Problem läßt sich nicht so einfach lösen. Du kannst zwar mit dem Makro alle Wörter die einen bestimmten Buchstaben haben (egal an welcher Stelle) durch Eingabe nur eines Buchstaben kopieren, aber nicht differenziert nach Anfangs- und Endbuchstaben.
Aber auch dies ließe sich mit VBA realisieren. Werde mich dazu später nochmal melden.

Gruß

Antwort 5 von Suki

vielen vielen Dank für deine Hilfe!

Bis zu Makro ausführen komme ich, aber was muss ich dann weiter machen?

Wenn ich auf "ausführen" gehe, kommt ein Fenster mit Suchbegriff/Suche.

Wenn ich da etwas eingebe, kommt die Meldung
"Index ausserhalb des gültigen Bereichs".

Was muss ich da tun?

Mit besten Grüssen und nochmals vielen Dank!

Antwort 6 von JoeKe

Hallo Suki,

die Fehlermeldung kommt daher das ich nicht weiß, wie deine Tabellenblätter heißen. Ich habe im Code das erste und das zweite Blatt deiner Mappe gewählt. Wenn du mir sagst wie das Blatt auf welchem gesucht werden soll und das Blatt in welches eingetragen werden soll heißen kann ich das ändern.

So und hier der Code für das Suchen nach Anfangs- und Endbuchstaben. HIer musst du im gegensatz zu ersten zwei Angaben machen. Groß- und Kleinschreibung müssen hier allerdings beachtet werden.

Gruß

Antwort 7 von JoeKe

upps das wichtigste vergessen

Sub anfang_ende()
Application.ScreenUpdating = False
Dim AnfBuch As String, EndBuch As String, Begriff As Range
AnfBuch = InputBox("Anfangsbuchstabe:")
If AnfBuch = "" Then Exit Sub
EndBuch = InputBox("Endbuchstabe:")
If EndBuch = "" Then Exit Sub
For Each Begriff In Sheets(1).UsedRange
If Left(Begriff, 1) = AnfBuch And Right(Begriff, 1) = EndBuch Then
Begriff.Copy
Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End If
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Antwort 8 von Suki

das Blatt heisst "2004"

Danke!

Antwort 9 von JoeKe

Und wie heißt das Zielblatt?

Antwort 10 von Suki

muss das Zielblatt im selben Dokument sein?
wenn ja, wie kann ich ein solches erstellen?
es existiert noch keins, also es kann heissen wie es will, egal

Antwort 11 von Suki

ok, habe ein neues Tabellenblatt erstellt, das habe ich jetzt "Dialoge" genannt

Antwort 12 von JoeKe

Nein das Zielblatt muss nicht unbedingt in der selben Mappe sein. Aber es vereinfacht die Sache sehr.
Wie ich durch AW 10 sehe hattest du bisher nur ein Blatt?!
Daher kann die Fehlermeldung auch gekommen sein, da ich in den ersten Codes den Blattindex angesprochen habe, und der unabhängig von der Namensgebung ist.
Aber mit zwei eindeutig bezeichneten Blättern ist es auf jeden Fall sicherer.

Lösch die beiden Codes die du jetzt hast im Code Fenster und kopier dafür die beiden neuen hinein.

Option Explicit

Sub suchen_kopieren()
Application.ScreenUpdating = False
Dim Begriff As String, gefunden As Variant, firstAddress As Variant
Begriff = InputBox("suche nach:", "Suchbegriff")
If Begriff = "" Then Exit Sub
With Sheets("2004").Cells
Set gefunden = .Find(Begriff, LookIn:=xlValues)
If Not gefunden Is Nothing Then
firstAddress = gefunden.Address
Do
gefunden.Copy
Sheets("Dialoge").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
Set gefunden = .FindNext(gefunden)
Loop While Not gefunden Is Nothing And gefunden.Address <> firstAddress
End If
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Sub anfang_ende()
Application.ScreenUpdating = False
Dim AnfBuch As String, EndBuch As String, Begriff As Range
AnfBuch = InputBox("Anfangsbuchstabe:")
If AnfBuch = "" Then Exit Sub
EndBuch = InputBox("Endbuchstabe:")
If EndBuch = "" Then Exit Sub
For Each Begriff In Sheets("2004").UsedRange
If Left(Begriff, 1) = AnfBuch And Right(Begriff, 1) = EndBuch Then
Begriff.Copy
Sheets("Dialoge").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End If
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Gruß

JöKe

Antwort 13 von Suki

wow, geil, es funktioniert!!!!
Vielen vielen Dank!

Kannst du mir noch sagen, was ich mit dem zweiten Dingsda machen soll?
Sollen das 2 Module sein oder sollen beide in ein Modul rein?

Antwort 14 von Suki

Zusatzfrage:

jetzt kopiert es mir nur diejenigen Felder rüber, in denen genau der Text vorkommt. Ich möchte allerdings, dass der ganze Datensatz - also die ganze Zeile - kopiert wird.
Wie macht man das?
Also der Text ist jeweils in der 4. Spalte, ich habe aber 10 Spalten, die ich ich auch gerne MIT dem Text zusammen mitkopiert hätte.
Verstehst du, wie ich meine?

Antwort 15 von JoeKe

zu AW 13

es handlet sich bei den Codes aus AW12 um zwei unabhängig funktionierende Makros, die aber beide in ein Modul kopiert werden können.
Wie ich schon in AW12 schrieb ist eine eindeutige Zuordnung der Tabellenblätter sicherer. Wenn man wie bei dem ersten Code mit dem Index arbeitet, kann es beim Einfügen, beim Löschen oder Verschieben von Blättern zu Problemen kommen.
Um die Übersicht zu behalten solltest du dein jetzt vorhandenes Modul erstmal löschen. Dazu wechselst du in die VBA-Umgebung, klickst mit rechts auf das Modul und wählst Modul1 entfernen. Die Nachfrage ob das Modul exportiert werden soll beantwortest du mit NEIN. Anschließend fügst du ein neues Modul wie oben beschrieben ein. In dieses kopierst du folgende Codes.

Option Explicit

Sub suchen_kopieren()
Application.ScreenUpdating = False
Dim Begriff As String, gefunden As Variant, firstAddress As Variant, _
Zeile As Long
Begriff = InputBox("suche nach:", "Suchbegriff")
If Begriff = "" Then Exit Sub
With Sheets("2004").Cells
Set gefunden = .Find(Begriff, LookIn:=xlValues)
If Not gefunden Is Nothing Then
firstAddress = gefunden.Address
Do
Zeile = gefunden.Row
Rows(Zeile).Copy
Sheets("Dialoge").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
Set gefunden = .FindNext(gefunden)
Loop While Not gefunden Is Nothing And gefunden.Address <> firstAddress
End If
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Sub anfang_ende()
Application.ScreenUpdating = False
Dim AnfBuch As String, EndBuch As String, Begriff As Range, Zeile As Long
AnfBuch = InputBox("Anfangsbuchstabe:")
If AnfBuch = "" Then Exit Sub
EndBuch = InputBox("Endbuchstabe:")
If EndBuch = "" Then Exit Sub
For Each Begriff In Sheets("2004").UsedRange
If Left(Begriff, 1) = AnfBuch And Right(Begriff, 1) = EndBuch Then
Zeile = Begriff.Row
Rows(Zeile).Copy
Sheets("Dialoge").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
End If
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Gruß

Antwort 16 von JoeKe

Mit den neuen Codes werden die kompletten Zeilen kopiert in denen der Suchbegriff gefunden wird.

Antwort 17 von Suki

Ja, supi, das funktioniert jetzt mi der kompletten Zeile.
Mit dem Text allerdings:
es nimmt immer den Anfangsbuchstaben des ganzen Textes und den Endbuchstaben des Textes, also den ersten Buchstaben vom ersten Wort und den letzten Buchstaben vom letzten Wort.
Diese Funktion sollte sich allerdings nur auf ein einzelnes Wort beziehen.

Bsp.
Der Hund beisst in deine Hand.

Dann sollte mit der Funktion h-d
sowohl Hund als auch Hand
gefunden werden.

Antwort 18 von JoeKe

Hallo Suki,

bisher war nur die Rede von Wörtern. Da bin ich davon ausgegangen, dass es sich um einzelnen Wörter in den Zellen handelt.
Ganze Sätze komplizieren das ganze bzw. machen es nahezu unmöglich alle Möglichkeiten zu berücksichtigen.
Ich werde nochmal darüber nachdenken.
Kann mich aber erst wieder nach den Feiertagen melden.

Schönes WE

JöKe

Antwort 19 von Suki

ok, danke!
ansonsten ist auch nicht weiter schlimm, dann suche ich halt nach allen möglichkeiten durch!

auf jeden fall vielen vielen Dank für deine Hilfe!!!

Dir auch ein schönes Wochenende!
Suki

Antwort 20 von regex

Stichwort: Reguläre Ausdrücke (regular expressions, regex, ...)
würde helfen, ist aber nicht ganz einfach

Antwort 21 von Suki

Hallo zusammen,

ich habe jetzt lange mit diesem Makro gearbeitet, funktioniert wunderbar!
Nun arbeite ich mit einer niederländischen Kollegin zusammen, die das Makro ebenfalls brauchen würde. Sie hat - wie ich - Micosoft Office Excel 2003, allerdings in der niederländischen Version. Bei ihr funktioniert das mit dem Makro überhaupt nicht; weiss jemand warum? Was muss sie tun, um in ihrem Excel auch mit diesem Makro arbeiten zu können?

Es wäre super, wenn uns jemand helfen könnte! Danke schon Mal!

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: