online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Tomschi vom 24.06.2021, 08:22 Options

Lösung

VBA - Autofilterproblem

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
http://www.file-upload.net/download-1722625/Filterproblem_Muster01....
eine Musterdatei abgelegt.

Vielleicht kann mir jemand behilflich sein.

DANKE!

Tom


Antwort schreiben

Antwort 1 von coros vom 24.06.2021, 14:32 Options

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
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Tomschi vom 25.06.2021, 07:11 Options

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

Antwort 3 von coros vom 25.06.2021, 08:04 Options

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
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Tomschi vom 25.06.2021, 09:07 Options

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

Antwort 5 von coros vom 25.06.2021, 09:20 OptionsLösung

Lösung
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
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von Tomschi vom 25.06.2021, 09:48 Options

Hi Oliver!

Vielen lieben Dank!
Du bist echt spitze!

Tom

Ähnliche Themen

VBA - Sperren
Kambarka  05.01.2008 - 103 Hits - 8 Antworten

VBA Format
Mona2008  09.01.2008 - 28 Hits - 5 Antworten

VBA
gropi  23.04.2008 - 50 Hits - 1 Antwort

VBA
Benjo_pont  03.07.2008 - 130 Hits - 2 Antworten

VBA
Chrissi_Li  21.08.2008 - 32 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 07:32:25 2026