user2k14
Goto Top

EXCEL IF Bedingung in VBA erstellen

Hallo Zusammen,

Wie kann ich mehrere If Bedingungen in VBA abbilden und diese dann durch einen Button in Excel ausführen?

Ich habe eine IF Bedingungen in Excel erstellt, aber ich verliere die Übersicht, ich würde es gerne in VBA abbilden.

Könnt ihr mir bitte helfen? Das u.a. ist nur ein Beispiel.

=IF(ISNUMBER(FIND("SCBV",EZ2)),"Montag",IF(ISNUMBER(FIND("TRBV",EZ2)),"Dienstag",IF(ISNUMBER(FIND("TWBV",EZ2)),"Mittwoch",IF(ISNUMBER(FIND("TTBV",EZ2)),"Donnerstag",IF(ISNUMBER(FIND("TVBV",EZ2)),"MORGEN",IF(ISNUMBER(FIND("VZBV",EZ2)),"FRÜH",IF(ISNUMBER(FIND("VZBT",EZ2)),"NACHMITTAG",IF(ISNUMBER(FIND("PUBV",EZ2)),"MITTAG",IF(ISNUMBER(FIND("VYBV",EZ2)),"NEU",IF(ISNUMBER(FIND("VZAV",EZ2)),"HAUS",IF(ISNUMBER(FIND("RCBV",EZ2)),"NACHT",IF(ISNUMBER(FIND("RCBW",EZ2)),"NACHTT",IF(ISNUMBER(FIND("QRBV",EZ2)),"MALE",IF(ISNUMBER(FIND("QRBW",EZ2)),"HUBERT",IF(ISNUMBER(FIND("QTBV",EZ2)),"THOMAS",IF(ISNUMBER(FIND("QVBW",EZ2)),"THOMASa",IF(ISNUMBER(FIND("QVBV",EZ2)),"THOMASaa",IF(ISNUMBER(FIND("ZYVJ",EZ2)),"TD4",IF(ISNUMBER(FIND("HQVH",EZ2)),"THOMASb",IF(ISNUMBER(FIND("HQCH",EZ2)),"neuue",IF(ISNUMBER(FIND("ZYTV",EZ2)),"Bernd",IF(ISNUMBER(FIND("ZZTV",EZ2)),"Melanie",IF(ISNUMBER(FIND("IUTV",EZ2)),"Melanie",IF(ISNUMBER(FIND("HSCH",EZ2)),"Gregor",IF(ISNUMBER(FIND("HSVH",EZ2)),"MAX",IF(ISNUMBER(FIND("JCMJ",EZ2)),"Schuster",IF(ISNUMBER(FIND("JCDJ",EZ2)),"Mario",IF(ISNUMBER(FIND("JCCJ",EZ2)),"Nexu",IF(ISNUMBER(FIND("JCZJ",EZ2)),"Conny",IF(ISNUMBER(FIND("JCXJ",EZ2)),"Boris",IF(ISNUMBER(FIND("JCPJ",EZ2)),"Rain",IF(ISNUMBER(FIND("JCHJ",EZ2)),"Meld",IF(ISNUMBER(FIND("JCWJ",EZ2)),"NIX",IF(ISNUMBER(FIND("ZYAJ",EZ2)),"NEUOYY",IF(ISNUMBER(FIND("PUBT",EZ2)),"SIsss4",IF(ISNUMBER(FIND("JCYJ",EZ2)),"MEIEE",IF(ISNUMBER(FIND("VYBT",EZ2)),"SF4",IF(ISNUMBER(FIND("VZAT",EZ2)),"NEUTOO",IF(ISNUMBER(FIND("SQVH",EZ2)),"NEUEEEE",IF(ISNUMBER(FIND("IUVJ",EZ2)),"MONDEE",IF(ISNUMBER(FIND("TSVH",EZ2)),"NISCCH",IF(ISNUMBER(FIND("JCEJ",EZ2)),"NEUEUEEE",IF(ISNUMBER(FIND("JCBJ",EZ2)),"MONSSD",IF(ISNUMBER(FIND("OLVH",EZ2)),"NEBDEE",IF(ISNUMBER(FIND("HSCH",EZ2)),"NEUNDE")))))))))))))))))))))))))))))))))))))))))))))

Vielen Dank!!

Content-ID: 259593

Url: https://administrator.de/contentid/259593

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

Meierjo
Meierjo 12.01.2015 aktualisiert um 15:47:15 Uhr
Goto Top
Hallo

Warum löst du das nicht mit SVerweis??

In einer Tabelle könntest du die Variabeln definieren, und zB eine Spalte weiter die Namen dazu.
Beispiel
A B
SCBV Montag
TRBV Dienstag
TWBV Mittwoch
TTBV Donnerstag

Und dann kannst du per SVerweis die Daten aus dieser Tabelle in eine andere Tabelle übertragen
http://www.excellernen.de/excel-sverweis/


siehe http://www.file-upload.net/download-10134725/Mappe1.xlsx.html

In Tabelle 1 A1 kannst du deine 4 Buchstaben eingeben
In Tabelle 2 stehen die Referenzen dazu (nicht vollständig)

Gruss Urs
user2k14
user2k14 12.01.2015 um 15:53:40 Uhr
Goto Top
Hi danke für die Antwort, aber das hilft mir leider nicht...da das Wort z.Bsp. SCBV in einer Zelle steht mit anderen Wörtern....ich muss überrprüfen, ob SCBV dort drinnen steht, wenn ja dann soll er mir in einer anderen Zelle "Montag" hinschreiben...das funktioniert bisher mit der langen formel, aber das ist auch begrenzt...mit VBA gebe es da keine Grenze....

Lg

Dani
colinardo
colinardo 12.01.2015 aktualisiert um 17:19:34 Uhr
Goto Top
Hallo user2k14,
auch wenn ich hier eine Matrix-Formel vorziehen würde (siehe Biber), hier trotzdem der Vollständigkeit halber noch eine Demo mit einer Worksheet-VBA-Funktion:
demo_multipleif_test_259593.xlsm

Function findValue(rngSearch As Range)
    Dim dic As Object, keys As Variant, f As Range
    Set dic = CreateObject("Scripting.Dictionary")  
    'Werte und deren Entsprechung hinzufügen  
    dic.Add "SCBV", "Montag"  
    dic.Add "TRBV", "Dienstag"  
    'usw. .....  

    keys = dic.keys
    For i = 0 To dic.Count - 1
        'Suche Key in der Suchzelle  
        Set f = rngSearch.Find(keys(i), LookIn:=xlValues, LookAt:=xlPart)
        'Wenn Wert gefunden wurde geben den entsprechenden Wert aus dem Dictionary zurück  
        If Not f Is Nothing Then
            findValue = dic.Item(keys(i))
        End If
    Next
    Set dic = Nothing
End Function
Grüße Uwe
Biber
Biber 12.01.2015 aktualisiert um 16:42:16 Uhr
Goto Top
Moin user2k14,

Kollege Meierjo hat durchaus Recht mit seinem Lösungsansatz - es reicht eine reine Formellösung mit Index()/Vergleich oder alternativ SVerweis().

Beispiel:
Angenommen du würdest auf einem neuen Blatt - nennen wir es mal "Sheet2" in den zwei Spalten A und B deine Mappingwerte eintragen wie oben vorgeturnt.
Und ebenfalls angenommen, in der ersten Zeile stehen die Überschriften "Key" und "Value" oder wie immer sie bei dir heissen.
Und drittens angenommen, du hättest 65 Mäppingwerte, also der gefüllte Datenbereich ginge von Sheet2!$A$2:$B$66.


Dann kannst du in das Feld, in dem heute dein Bandwurm-IF-Gestrunkele steht schreiben (in EZ2 steht wie in deinem Ansatz der Suchstring)
=INDEX(Sheet2!$B$2:$B$66;VERGLEICH(1; --ISTZAHL(FINDEN(Sheet2!$A$2:$A$66;EZ2));0);1)
Dat Janze mit Ctrl-Shift-Enter abschliessen, weil wegen is' sich Matrixformel.

Falls dein Excel ein Outlandishes ist, dann lautet die Formel sinngemäß
=INDEX(Sheet2!$B$2:$B$66;MATCH(1; --ISNUMBER(FIND(Sheet2!$A$2:$A$66;EZ2));0);1)
..und wird mit Ctrl-Shift-Enter abgeschlossen, weil is' auch dann Matrixformel.

Kannst auch dem Bereich Sheet2!$A$2:$A$A66 den Namen "Keys" und dem Bereich Sheet2!$B$2:$B$66 den Namen "Values" geben und schreiben:
=INDEX(Values;MATCH(1; --ISNUMBER(FIND(Keys;EZ2));0);1)
Aber trotzdem mit Ctrl-Shift-Enter... ach, den Rest ahnst du schon.

Grüße
Biber

[Edit] @colinardo:
Warum denn mit Kanonen auf Spätzle werfen??
[/Edit]
colinardo
colinardo 12.01.2015 aktualisiert um 16:49:21 Uhr
Goto Top
Zitat von @Biber:
[Edit] @colinardo:
Warum denn mit Kanonen auf Spätzle werfen??
[/Edit]
Naja wenn er es unbedingt in VBA haben will face-wink ich hab's aufgegeben die User mit Formeln zu bewerfen die sie nicht verstehen ...Und die Frage bezog sich ja auf VBA (siehe Titel)
Biber
Biber 12.01.2015 aktualisiert um 16:59:17 Uhr
Goto Top
Moin colinardo,

wo hat er denn was davon geschrieben, dass er es verstehen will? face-wink
Er "verliert die Übersicht", was ich ja nachvollziehen kann. Von "Verstehen-wollen" lese ich nix.

Okay, dass es VBA sein soll, das hat er geschrieben... weil die Formel zu lang wird für eine Excel-Zelle *gg.

Aber anyhow -deine Variante ist doch nicht praxiskompatibel... jedes Mal, wenn ein ver###ter Mappingwert dazu kommt oder sich ändert, dann müssen Zeilen in einem VBA-Quellcode angepasst werden ???? *lach*

Erklär das mal in einer Durchschnitts-Kneipe auf einem Durchschnittsplaneten dieser Galaxie irgendwelchen zufällig anwesenden Lebensformen.
Überraschtes Glucksen und hochgezogene Augenbrauen (oder entsprechende Körperteile) werden die Antwort sein.

Nee, immer wortwörtlich nur auf genau die gestellte Frage einzugehen ist nicht immer zielführend. Auch wenn der Usr sich dann bedankt und es als "Gelöst" markiert.

Grüße
Biber
colinardo
colinardo 12.01.2015 aktualisiert um 17:25:51 Uhr
Goto Top
Ist ja egal so hat nun jeder was vom Thread die VBA- und die Formelfraktion face-smile

Nee, immer wortwörtlich nur auf genau die gestellte Frage einzugehen ist nicht immer zielführend. Auch wenn der Usr sich dann bedankt und es als "Gelöst" markiert.
Das ist ja auch nicht mein Ziel, aber ich habe es schon zu oft hier erlebt das User einfach nicht davon abzubringen waren. Und wenn ein anderer User hier im Forum nach einer solchen Lösung mit VBA sucht (steht ja im Titel) dann soll er auch was mit VBA finden face-wink. Dafür sind wir ja eine Community bei der jeder etwas beisteuert. Der User hat dann die Wahl und kann dann die Lösung wählen, welche zu seinem Projekt passt.

Grüße Uwe
Meierjo
Meierjo 12.01.2015 um 17:01:28 Uhr
Goto Top
Hallo

....ich muss überrprüfen, ob SCBV dort drinnen steht, wenn ja dann soll er mir in einer anderen Zelle
"Montag" hinschreiben

Und was soll passieren, wenn du mehrere "Uebereinstimmungen hast?? Soll er dann Montag, Dienstag, in die Zelle schreiben, oder nur die Erste Uebereinstimmung, oder nur die Letzte??

Gruss Urs