Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Instr mit logischen Operatoren

Instr mit logischen Operatoren
09.11.2020 12:25:21
Dennis
Hallo liebe Forumsmitglieder,
folgendes Problem bereitet mir Schwierigkeiten:
Ich habe zwei Listen: eine mit Tieren und eine mit Essen (siehe Beispiel unten).
Nun möchte ich für Tier 1 feststellen, ob das Essen 1 geeignet ist.
Hierbei stehen die senkrechten Striche für eine "ODER" und das &-Zeichen für eine "UND"- Verknüpfung.
Dabei muss die gesamte Logik von Essen 1 erfüllt sein, damit es für Tier 1 geeignet ist.
Mir fehlt leider jeglicher Ansatz wie ich diesen Vergleich unter Einbeziehung der Logik in VBA erstellen soll.
Habt ihr da vielleicht einen Ansatz, wie das Problem gelöst werden könnte?
Tier 1 (Zelle A1)
ESEL ALT KAROTTEN GRAS AEPFEL (Durch einfache Leerzeichen getrennt)
Essen 1 (Zelle B1)
(ESEL | PFERD | KUH) & (JUNG | ALT) & KAROTTEN
In Zelle C1 soll nun stehen, ob das Essen 1 für Tier 1 geeignet ist oder nicht (Wahr/Falsch).
Vielen Dank,
Dennis

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Instr mit logischen Operatoren
09.11.2020 14:45:46
Daniel
Hi
das Lösungsprinzip wäre, dass man im Text von B1 alle Worte durch 0 oder 1 ersetzt, je nachdem ob es in A1 enthalten ist (1) oder nicht (0)
dann ersetzt man die "|" durch "+" und die "&" durch "*"
WAHR entspricht 1
FALSCH entspicht 0
ODER entspricht ADDITION
UND entspricht MULTIPLIKATION
damit bekommt man einen Textstring, der einer Rechenoperartion entspicht und den VBA mit EVALUATE berechnen kann.
der Code dafür würde so aussehen:
Function IstEssenGeeignet(Tier As String, Essen As String) As Variant
Dim arrEssen
Dim Essen2 As String
Dim X
Dim Ergebnis
Tier = " " & Tier & " "
Essen2 = Essen
For Each X In Array("(", ")", "&", "|")
Essen2 = Replace(Essen2, X, " ")
Next
For Each X In Array("(", ")", "&", "|")
Essen = Replace(Essen, X, " " & X & " ")
Next
Essen2 = WorksheetFunction.Trim(Essen2)
arrEssen = Split(Essen2, " ")
Essen = " " & Essen & " "
For Each X In arrEssen
X = " " & X & " "
If InStr(Tier, X) > 0 Then
Essen = Replace(Essen, X, 1)
Else
Essen = Replace(Essen, X, 0)
End If
Next
Essen = Replace(Essen, "|", "+")
Essen = Replace(Essen, "&", "*")
Essen = Replace(Essen, " ", "")
IstEssenGeeignet = CBool(Evaluate(Essen))
End Function
Gruß Daniel
Anzeige
AW: Instr mit logischen Operatoren
10.11.2020 10:12:13
Dennis
Vielen Dank Daniel. Das hat echt super geklappt.
Gruß
Dennis
AW: Instr mit logischen Operatoren
10.11.2020 20:36:52
SF
Toll auch dass du in den anderen Foren Bescheid gesagt hast! Toll.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige