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

Forumthread: Filterkriterium als String übergeben

Filterkriterium als String übergeben
markus2
Hallo Forum,
Ich habe folgendes Problem mit VBA.
Ich möchte einem Autofilter als Kriterium einen String übergeben, welcher dummerweise mit einem Gleichheitszeichen beginnt. Hier ein Beispiel "=XB1+E09"
VBA interpretiert dies logischerweise als Formel. Das möchte ich vermeiden, da es sich um einen Bezeichner handelt - und nicht um eine Formel.

filterkriterium = "=XB1+E09"
Sheets(1).Cells.AutoFilter field:=filter_spalte, Criteria1:=Cstr(filterkriterium)
Ich habe bereits den Autofilter sowie den Spezialfilter probiert.
Ebenso habe ich mit der Umwandlung Cstr herumgespielt. Alles ohne Erfolg.
Gibt es da einen einfachen Trick? :)
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 02:21:57
Adelhorst
Hallo markus2.
Mit deinem Vorhaben kennne ich mich noch nicht so aus,a ber versuche doch mal 'filterkriterium' als String zu deklarieren bzw. "'=XB1+E09".
Das 'Häkchen' formatiert den Zelleneintrag dann als Textstring.
Gruss
Adelhorst
AW: Filterkriterium als String übergeben
09.07.2009 03:13:19
markus2
Hallo Adelhorst,
Danke für die Antwort. Deinen Vorschlag habe ich gleich mal getestet.
Leider ohne Erfolg.
Dim aok As String
aok = ThisWorkbook.Sheets(1).aok.Value
Sheets(3).Cells.AutoFilter field:=AOK_spalte, Criteria1:=Cstr(aok)
aok bekommt den Wert "=E1+ZS1"
Der Autofilter nimmt trotzdem "E1+ZS1" als Kriterium (kann man im Autofilter nachgucken)
Übrigens:
Den Trick mit dem doppelten Gleichheitszeichen kann ich in meinem Fall nicht anwenden, da ich später auch einen Spezialfilter verwende. Dieser hat nicht 1 Filterkriterium, sondern gleich ~40 welche alle einzeln erst geprüft, verändert und später zurückverändert werden müssten.
Sheets(3).Cells.AutoFilter field:=AOK_spalte, Criteria1:= "=" & aok  
Ich suche also einen Methode, wie ich VBA erkläre, das er "=E1+ZS1" nicht als Formel interpretieren soll.
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 07:43:08
Tino
Hallo,
versuche es mal so.
filterkriterium = "==XB1+E09"
Gruß Tino
AW: Filterkriterium als String übergeben
09.07.2009 17:18:42
markus2
Hallo Tino,
daran habe ich auch schon gedacht. Ich erwähnte dies auch in meiner 1. Antwort :)
Für den Autofilter ist diese Variante geeignet.
Leider nicht für den Spezialfilter. Ich will auch erklären warum:
Gegeben ist eine Tabelle mit 16.000 Zeilen, welche gefiltert werden soll.
Gegeben ist ebenfalls ein zweites Blatt mit einer Spalte, in der ~40 Filterkriterien stehen:
Diese sieht in etwa so aus: (Anzahl und Inhalt ist variabel)
AOK
=XB1+XA7
=E17+S1
=E18+S1
=E19+S1
=E20+S1
=E21+S1
E22+S1
=E23+S1
=E24+S1
=E25+S1
=E26+S1
=E28+S1
E29+S1
=E30+S1
=E31+S1
=E32+S2
=E33+S1
E34+S1
E35+S1
E36+S1
=E37+S1
=E38+S1
E39+S1
=E40+S1
E41+S1
=E42+S1
=E43+S1
=E20+S2
E23+S2
=E27+S1
=E32+S1
=E32+S3
=E40+S2
E40C+S3
=XB2+XA8
=XB2+XB8
=YG0+YA1
Der Spezialfilter wird dann wie folgt angewendet:
Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range( _
Sheets(2).Cells(1, 1), Sheets(2).Cells(endzeile, 1))
Alle Kriterien ohne Gleichheitszeichen funktionieren korrekt. Die anderen jedoch nicht.
Um mit der vorgeschlagenen Lösung arbeiten zu können, müsste:
- jede Zelle geprüft werden, ob das erste Zeichen ein "=" ist
- wenn ja, dann setzte ein 2. "=" davor
- merke dir die Zelle, in der du etwas verändert hast
- wende den Spezialfilter an
- lösche das 2. "=" wieder in den vorher gemerkten Zellen
Das ist absolut machbar - jedoch würde es mich ärgern, wenn es keinen einfacheren Weg geben würde.
Denn das richtige Filterkriterium ist ja an sich schon vorhanden.
Er darf es nur nicht als Formal interpretieren.
Nur falls ihr alle sagt "Nein, das geht nur so", dann mache ich das so :)
Anzeige
AW: Filterkriterium als String übergeben
09.07.2009 17:58:07
Tino
Hallo,
versuche mal mit Platzhalter zu arbeiten. (? Oder *)
Gruß Tino
da fällt mir noch ein...
10.07.2009 08:34:13
Tino
Hallo,
, Du kannst beim Spezialfilter auch mit oder arbeiten, indem Du als Kriterium einmal mit und einmal ohne = Zeichen angibst, um dies als Oder zu bekommen musst Du diese nebeneinander schreiben nicht untereinander.
Beispiel:
With Sheets(2)
.Range("A1") = "AOK"
.Range("B1") = "AOK"
.Range("A2") = "'=E29+S1"
.Range("B2") = "'E29+S1"
Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Range("A1:B2")
End With
Gruß Tino
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Filterkriterium als String in VBA übergeben


Schritt-für-Schritt-Anleitung

Um ein Filterkriterium in VBA zu übergeben, das mit einem Gleichheitszeichen beginnt, kannst du die folgenden Schritte ausführen:

  1. Deklariere das Filterkriterium als String:

    Dim filterkriterium As String
    filterkriterium = "'=XB1+E09"  ' Achte auf das vorangestellte Apostroph
  2. Wende den Autofilter an:

    Sheets(1).Cells.AutoFilter field:=filter_spalte, Criteria1:=filterkriterium
  3. Für den Spezialfilter: Stelle sicher, dass du das Kriterium in einer geeigneten Struktur bereitstellst, indem du auch den Apostroph verwendest:

    Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(endzeile, 1))

Häufige Fehler und Lösungen

  • Fehler: Filterkriterium wird als Formel interpretiert

    • Lösung: Achte darauf, dass du das Filterkriterium mit einem Apostroph versiehst, um es als Text zu kennzeichnen, z.B. "'=E1+ZS1".
  • Fehler: Der Spezialfilter funktioniert nicht mit Gleichheitszeichen

    • Lösung: Verwende eine Kombination aus Kriterien mit und ohne Gleichheitszeichen nebeneinander. Beispiel:
      With Sheets(2)
      .Range("A1") = "AOK"
      .Range("B1") = "AOK"
      .Range("A2") = "'=E29+S1"
      .Range("B2") = "'E29+S1"
      Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Range("A1:B2")
      End With

Alternative Methoden

Wenn die oben genannten Methoden nicht funktionieren, kannst du auch folgende Alternativen versuchen:

  • Platzhalter verwenden: Nutze ? oder * als Platzhalter im Filterkriterium, um mehr Flexibilität zu erreichen.
  • Doppelte Gleichheitszeichen: In manchen Fällen kann es helfen, doppelte Gleichheitszeichen zu verwenden, um VBA anzuweisen, dies nicht als Formel zu interpretieren.

Praktische Beispiele

Hier sind einige Beispiele, die du in deiner Arbeit verwenden kannst:

  1. Einfacher Autofilter mit einem String:

    Dim filterkriterium As String
    filterkriterium = "'=E1+ZS1"
    Sheets(1).Cells.AutoFilter field:=1, Criteria1:=filterkriterium
  2. Spezialfilter mit verschiedenen Kriterien:

    With Sheets(2)
       .Range("A1") = "Kriterium"
       .Range("A2") = "'=E29+S1"
       .Range("A3") = "'E29+S1"
       Sheets(1).UsedRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Range("A1:A3")
    End With

Tipps für Profis

  • Verwende Debugging-Techniken: Nutze Debug.Print in deinem VBA-Code, um den Wert von Variablen während der Ausführung zu überprüfen.
  • Schreibe wiederverwendbare Funktionen: Erstelle Funktionen, die das Filtern basierend auf den übergebenen Kriterien automatisieren.
  • Teste in verschiedenen Excel-Versionen: Achte darauf, dass du den Code in der Version testest, die du auch verwendest, da sich die VBA-Implementierung leicht unterscheiden kann.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Filterkriterium als Text interpretiert wird?
Setze ein Apostroph (') vor das Gleichheitszeichen in deinem Kriterium.

2. Was kann ich tun, wenn der Spezialfilter nicht wie gewünscht funktioniert?
Verwende eine Kombination aus Kriterien mit und ohne Gleichheitszeichen oder teste verschiedene Platzhalter.

3. Gibt es eine Möglichkeit, mehrere Filterkriterien gleichzeitig zu verwenden?
Ja, du kannst mehrere Kriterien in nebeneinander stehenden Zellen angeben, um die logische Funktion "ODER" zu nutzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige