2.4k Aufrufe
Gefragt in Tabellenkalkulation von tomschi Mitglied (879 Punkte)
Wünsche allseits einen Guten Morgen!

Ich habe per VBA eine Filtermöglichkeit für einen
bestehenden Autofilter gebastelt.

So lange es sich bei dem Filterkriterium um einen
Text handelt funktioniert der Code.
Leider habe ich jedoch beim Zahlen Probleme.

Aus Vereinfachungsgründen habe ich hier
www.file-upload.net/download-1722625/Filterproblem_Muster01.xls.html
eine Musterdatei abgelegt.

Vielleicht kann mir jemand behilflich sein.

DANKE!

Tom

6 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tom,

ändere im Makro "Sub enthält_Wort()" die letzte Zeile in

Selection.AutoFilter Field:=Filterspalte, Criteria1:=sFilter, Operator:=xlAnd
dann funktionierts. Warum hast Du eigentlich die andere Kombination vorweg und hintendran gehängt?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Guten Morgen Oliver!

Zunächst DANKE, dass Du Dich um mein Problem angenommen hast.

Dein Vorschlag funktioniert leider nur bedingt.

Spalte 1 + Spalte 3 = okay
Spalte 5 --> immer noch kein "Filterergebnis
Wahrscheinlich liegt es an der Formatierung, oder?
Gibt es dafür auch noch einen Lösungsansatz?

Warum hast Du eigentlich die andere Kombination vorweg und hintendran gehängt?
Was meinst Du damit?

Gibt es eine einfacher (= bessere) Lösung?
Wenn ja, wie sollte diese Deiner Meinung nach aussehen?

Mit Deinem Code wird auf exakt den Suchwert gefiltert.

Ich möchte jedoch quasi als "enthält" suchen.
Speziell bei diversen Texten weiss ich oft nicht, ob der "Suchtext" auch genau so vorkommt.
Beispiel:
Office2000, OfficeXP --> gewünschte Suchanfrage "enthält Office"

Daher auch
Selection.AutoFilter Field:=Filterspalte, Criteria1:="=*" & sFilter & "*", Operator:=xlAnd

Ciao

Tom
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tom,

das in der Spalte E keine Übereinstimmung gefunden wird, liegt daran, dass Deine Variable, die Du an die Filterfunktion übergibst dem Typ "String" also Text entspricht. Die Zahlen, die aber in Spalte 5 stehen entsprechen aber dem Typ "Double", also Gleitkommazahl. Das ist das Problem. Wenn Du der Variable "sFilter" mal den Typ "Dounble" zuweist, findet er auch das Ergebnis is Spalte E, allerdings dann keine Übereinstimmungen mehr, die Text sind.
Im Moment fällt mir da auch nichts produktives ein, wie man das lösen könnte, außer auf den Autofilter zu verzichten und das Ganze über eine Schleife zu realisieren.

Zu dem Filterkriterium. Wie Du richtig schreibst, findet meine Lösung den exakten Wert, weil nach "entspricht" gefiltert wird. Deine Lösung nicht, da Du ja nach "enthält" filterst. Wenn Du nun aber z.B. in einer Auflsitung mit Zahlen die von 1-10 aufgeführt sind, die Zahl 2 suchst, wirst Du kein Ergebis mit "enthält" finden, da hier nur ein Ergebnis mit entspricht gefunden werden kann. Du musst also beide Kriterien miteinander verbinden. Deine Makrozeile sieht dann also wie folgt aus:

Selection.AutoFilter Field:=Filterspalte, Criteria1:="=*" & sFilter & "*", Operator:=xlOr, _
Criteria2:=sFilter

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hallo Oliver!

Wow, HERZLICHEN DANK für Deine Unterstützung!

String und Double --> Hm?
Hier liegt also das Problem.
Kann man vorweg auslesen, ob es sich um eine "String- bzw. Double-Zelle" handelt?
So könnte man danach ein separates Makro starten.

Das mit dem Verbinden der Kriterien finde ich echt klasse.
90% meiner Problemstellung sind so gelöst.

Ciao

Tom
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tom,

mit nachfolgendem Beispielmakro kannst Du das Format der aktuellen Zelle auslesen und entsprechend dem Kriterium dann ein Makro starten.

Sub Auswerten()
If ActiveCell.NumberFormat = "#,##0.000_ ;[Red]-#,##0.000 " Then
Start_Makro_Variable_Double
ElseIf ActiveCell.NumberFormat = "General" Then
Start_Makro_Variable_String
End If
End Sub

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von tomschi Mitglied (879 Punkte)
Hi Oliver!

Vielen lieben Dank!
Du bist echt spitze!

Tom
...