Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1372to1376
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

Imp Operator

Imp Operator
07.08.2014 17:35:15
Anton
Hallo,

ich möchte mit VB/VBA einen Ausdruck mit Logischen Operatoren auswerten lassen.
Beispiel: (1 And 0) Or 1 = 1
Soweit funktioniert auch alles. Für einige Berechnungen benötige ich den Imp Operator, jedoch ermittelt das Programm bei diesem Operator ein falsches Ergebnis. Anstatt False / 0 gibt es -2 aus und für True / 1 ermittelt es -1. Kann mir jemand helfen, wo das Problem liegt?
Grüße
Anton

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wie lauten deine VBA Befehle? (owT)
07.08.2014 17:48:09
EtoPHG

Gelöst - Quellcode
07.08.2014 20:02:46
Anton
Hallo,
Dank des Hinweises von Nepumuk hat sich das Problem erledigt. Zur Vervollständigung der Frage noch der Quellcode.
Ziel des Codes ist einen Ausdurck mit Logischen Operatoren auszuwerten. Da ich diesen Ausruck während des Programmablaufs erst erstelle habe ich mir einen VB Code aus einem anderen Form zu Nutze gemacht (vb-fun.de). Zu nächst wird der Ausruck in einem String gespeichert. In dem String stehen nur noch "True", "False" und die Logischen Operatoren. Diese "Bausteine" sind immer durch ein Leerzeichen getrennt.
Sub BeispielCode
Dim strFormel as String
Dim Ergebnis as Boolean
strFormel = "True Imp False"   ' Bsp. für eine Berechnung
' ScriptControl hinzufügen
Set scrObj = CreateObject("ScriptControl")
' Scriptsprache festlegen
scrObj.Language = "VBScript"
' Ausführen der Anweisung
scrObj.ExecuteStatement ("Ergebnis = " & strFormel)
Ergebnis = scrObj.Eval("Ergebnis")
MsgBox "Das Ergebnis ist " & xErgebnis
End Sub

Vielen Dank
Anton

Anzeige
AW: Imp Operator
07.08.2014 18:14:56
Nepumuk
Hallo,
Imp und Eqv funktionieren nur mit boolschen Werten.
Gruß
Nepumuk
P.S. Warum es in der Hilfe anders steht, weiß ich auch nicht.

Alle VBA-Logik-Operatoren fktionieren ...
08.08.2014 03:08:15
Luc:-?
…grundsätzlich sowohl mit Zahlen als auch mit Booleschen Werten! Will man als Ergebnis nur Letztere haben, müssen die Operanden eben auch in dieser Form vorliegen. Interessant sind aber gerade auch Erstere als Operanden.
Morrn, Luc :-?

EDV-Grundlagen: Für das Bsp sähe das so aus, ...
12.08.2014 16:16:52
Luc:-?
…Anton & Interessierte;
da es sich bei LogikFktt um eine bit-orientierte Operation handelt und eine ganze Dezimalzahl für eine Ziffer mindestens 4 Bits (1 HalbByte, gepackt), normalerweise 8 Bits (1 Byte) beansprucht:
(00000001 and 00000000) or 00000001 ⇒ 00000000 or 00000001 ⇒ 00000001
Analog fktioniert es auch mit den anderen LogikOperatoren, nur muss bedacht wdn, dass Boolesche Werte wie True und False nur 1 Bit benötigen. Wdn diese Werte in VBA in Ganzzahlen konvertiert, ergibt sich -1 und 0, weil bei einer negativen Zahl hier das 1.Bit (von links, es gibt auch noch andere Konventionen) den Wert 1 hat(/haben muss), was dazu führt, dass not 00000000 ⇒ 11111111 ergibt, was nach dieser Konvention dezimal -1 (255-256) entspricht. In Xl wird dagg angenommen, dass sowohl -1 als auch 1 eine Negation von 0 sein können. Ein umgewandelter Wahrheitswert WAHR ergibt somit 1. Das ist aber speziell so pgmiert und entspricht genauso­wenig dem üblichen Bit-Hintergrund wie die Festlegung der Darstellungs­länge einer Dezimal­Ziffer auf 10 Zeichen in XlFktt wie DEZINBIN (da legt dann die 1. von 10 Ziffern die Negativität fest).
-2 (254-256) entspräche übrigens dem Byte 11111110, was man u.a. durch Negation von 00000001 (⇒1) erhält.
Damit sollte auch klar sein, warum DezimalZahlen niemals Wahrheitswerten oder gar TextZahlen gleich sein können, denn die weisen auf Byte-Ebene abweichende Bit-Folgen auf. Man muss diese also stets erst konvertieren (was in VBA fallweise auch automatisch erfolgt).
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige