VBA mit LIKE und Variable
#1
Hallo zusammen,
ich habe eine Liste mit 2600 Menschen, die verschiedenen Vereinen angehören. Ich möchte diese Liste nach einzelnen Vereinen sortieren. Die Vereine sind kodiert, z.B. H015.
In das Feld „Sheets("Sortieren").Range("D3")“ soll man den entsprechenden Code eingeben. Das folgende Makro funktioniert prima, solange die Menschen nur in einem Verein sind. Wenn in der großen Liste aber z.B. „A019, H015“ oder mehr in der entsprechenden Zelle steht, wird der Eintrag "H015" nicht gefunden.
Ich habe schon mit LIKE und * experimentiert, aber keine Lösung gefunden. Deshalb bitte ich Euch um Hilfe.
Vielen Dank im Voraus, Detlef

Hier das Makro:

Dim Verein As String
Verein = Sheets("Sortieren").Range("D3").Value
Sheets("Mitglieder kompl.").Select
For i = 2 To 2600
If Cells(i, 22).Value = Verein Then
    Rows(i).Select
    Selection.Copy
    Sheets("Ergebnis").Select
    Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select
    ActiveCell.EntireRow.Select
    ActiveSheet.Paste
    Sheets("Mitglieder kompl.").Select
End If
Next
Sheets("Ergebnis").Select
Range("A2").Select
End Sub
Antworten Top
#2
Hi,

in Deinem Fall wäre die Suche mit Instr notwendig, allerdings ist das Makro sehr verbesserungswürdig. Es wäre hilfreich, eine Musterdatei zu haben. Ggf würde das einfacher mit der Funktion FILTER realisierbar, ich weiß aber nicht ob 2021 die hat.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallo Edgar,

O2021 hat die Filterfunktion.

Gruß Uwe
Antworten Top
#4
Hallo Uwe,

danke für die Info. Jetzt fehlt nur noch eine Musterdatei.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo BoskoBiati,

anbei meine Datei. Natürlich musste ich aus Datenschutzgründen vieles löschen, aber ich hoffe, es wird klar, wo mein Problem liegt.
Dass das Makro verbesserungswürdig ist, glaube ich gern - ich habs allein zusammengebastelt, aber es läuft.

LG Detlef
.xlsm   Vxxx Mitglieder .xlsm (Größe: 779,4 KB / Downloads: 2)

Datei die Zweite

Ich habe gerade festgestellt, dass die Makros in der ersten Datei nicht richtig klappen - anscheinend habe ich zuviel Datenschutz betrieben... sorry dafür!
Hier eine (hoffentlich) funktionierende Variante.


Angehängte Dateien
.xlsm   2Vxxx Mitglieder .xlsm (Größe: 1,31 MB / Downloads: 10)
Antworten Top
#6
(26.05.2025, 19:49)Detlef schrieb: Ich möchte diese Liste nach einzelnen Vereinen sortieren. Die Vereine sind kodiert, z.B. H015.
In das Feld „Sheets("Sortieren").Range("D3")“ soll man den entsprechenden Code eingeben. Das folgende Makro funktioniert prima, solange die Menschen nur in einem Verein sind. Wenn in der großen Liste aber z.B. „A019, H015“ oder mehr in der entsprechenden Zelle steht, wird der Eintrag "H015" nicht gefunden.
Ich habe schon mit LIKE und * experimentiert, aber keine Lösung gefunden. Deshalb bitte ich Euch um Hilfe.

Moin,
ist ja schön, dass Du sortieren willst aber wonach? Nach Mitgliedsnr, Name, Verein???
Dein Makro stiftet mehr Verwirrung denn Klarheit.
Ich versteh Dein Anliegen so: Du gibst einen Suchbegriff mit dem Vereinscode (Bsp. A011) ein und im Ergebnisblatt sollen nur die Mitglieder angezeigt werden, bei denen in der Spalte V (Verein) der Mitgliederliste der Suchcode enthalten ist. Stimmt das soweit?
Ich hab Deine Datei mal ein wenig aufgeräumt. Den Suchcode wählst Du jetzt direkt oben im Ergebnisblatt aus... Wenn die Makros aktiviert sind, nach jeder Änderung des Suchcodes kurz warten oder Rechtsklick in die Ergebnistabelle und auf Aktualisieren klicken.


.xlsm   2Vxxx Mitglieder .xlsm (Größe: 1,56 MB / Downloads: 5)
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#7
Hallo

gerade frisch aus dem Testofen, bei mir funktioniert es. Ich habe bei mir eine CheckBox eingefügt!
Eine KontrollBox mit dem Text "Ganze Zelle vergleichen". Grosser Unterschied z.B. bei Verein A019
Den gibt es nur als "A019", oder auch als Kombi "S091; A019" und "10; A019"

mfg Gast 123

Code:
Sub CommandButton1_Click()
Dim rng As Range, Adr1 As String
Dim ERG As Worksheet, z As Long
Dim tbl As ListObject, SOpt As Variant
   'Verein + Option laden  (Ganze Zelle)
    Verein = Sheets("Sortieren").Range("D3")
    SOpt = Sheets("Sortieren").CheckBoxes(1).Value
    If SOpt = 1 Then SOpt = xlWhole Else SOpt = xlPart
   
    Set ERG = Sheets("Ergebnis")  'Sheets setzen
    Set tbl = Sheets("Mitglieder kompl.").ListObjects(1)
    'Suche Verein in Spalte V
    Set rng = tbl.ListColumns("Verein").DataBodyRange.Find(What:=Verein, After:=[v2], LookIn:=xlFormulas, _
              LookAt:=SOpt, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If rng Is Nothing Then MsgBox Verein & "  dieser Verein existiert nicht!": Exit Sub
   
    ERG.Cells.ClearContents 'Ergebnis löschen
    Sheets("Mitglieder kompl.").Rows(1).Copy
    ERG.Rows(2).PasteSpecial xlPasteValues
    Application.ScreenUpdating = False
   
    Adr1 = rng.Address:  z = 2  '1.Zeile
    Do 'alle Daten auflisten
       z = z + 1
       tbl.ListRows(rng.Row - 1).Range.Copy
       ERG.Cells(z, 1).PasteSpecial xlPasteValues
       Set rng = tbl.ListColumns("Verein").DataBodyRange.FindNext(rng)
    Loop Until rng.Address = Adr1
    Application.CutCopyMode = False
End Sub
Antworten Top
#8
Hi,

hier mal eine Version ohne Makros:


.xlsx   2Vxxx Mitglieder_01.xlsx (Größe: 1,3 MB / Downloads: 4)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#9
Warum kein Autofilter im Listobjects(1) in Tabelle Mitglieder komplett ? A009 als Kriterium funktioniert.
Und dann sortieren im Feld 'Name'.
3 Arbeitslätter und die die Makros sind alle überflüssig.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • derHoepp
Antworten Top
#10
Hallo Detlef,

Mit =Filter() ist es ein recht einfacher Weg die benötigte Teilstringsuche zu realisieren.
Mit VBA kann man sowohl mit dem Like Operator als auch mit dem moderneren Instr() eine Teilstring Suche realisieren.

Um eine schnelle Ausgabe zu realisieren, welche einigermaßen effizient ist, wäre es wenigstens sinnvoll dies via Array zu machen und das Filtrat on Block auszugeben.
Ein ebenso effizienter Weg ist mit dem AdvancedFilter (erweiterter Filter) mit Platzhalter ( ="=*Teilstring*" ) via CellFormula sich das Filtrat auf einem anderen Tabellenblatt ausgeben zu lassen.

Beispiele gibt es dafür im Netz zu Hauf.
Hilft es nicht weiter, dann lade eine Demodatei hoch und ruck zuck wird es diverse Lösungsvorschläge dafür geben.
Ich habe jetzt keine Lust eine Datei dafür nachzubauen.

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste