Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Komma oder Punkt - Das ist hier die Frage....

Komma oder Punkt - Das ist hier die Frage....
19.02.2007 17:31:00
Axel
Hallo,
Ich habe da ein kleines Problem mit dem deutschen Dezimalkomma. Die folgende Procedur gibt leider einen Fehler auf einem deutzchen Rechner, wenn z.B. der Range.Cells(i, 2) keine Ganzzahl ist (z.B. 10,5):
= If Not Evaluate(CDbl(DBRange.Cells(i, 2)) & ">10" ) Then Exit For
Hat jemand eine Idee, dass das auch auf allen Rechnern laeuft?
Gruss,
Axel

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Komma oder Punkt - Ist das die Frage?
19.02.2007 18:05:14
Erich
Hallo Axel,
gibt es einen Grund dafür, dass du nicht einfach
If DBRange.Cells(i, 2) < 10 Then Exit For
schreibst?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Komma oder Punkt - Das ist hier die Frage....
19.02.2007 18:29:00
ingUR
Hallo, Axel,
unabhängig von der Antwort auf Erichs Frage, die mich auch interessiert, könnte man vielleicht über eine Fehlerabfrage die Flexibilität erreichen, wenn die Schnelliglkeit nicht unverträglich eingeschrängt wird (dann würde sich eine zweite Version der Prozedur lohnee, die nach einmal festgelegter Umgebung angesprochen wird):
 On Error Resume Next
If Not Evaluate(CDbl(DBRange.Cells(i, 2)) & ">10") Then
Exit For
ElseIf Not Evaluate(CDbl(Replace(DBRange.Cells(i, 2), ",", ".")) & ">10") Then
Exit For
Else
MsgBox "anderer Fehler"
End If
Der Grundgedanke könnte benutzt werden um einen Schalter zu setzen, der je nach Stellung zu den verschieden Prozedurzweigen verzweigt ohne dass ein Fehler in der Schleife ausgewertet weden muß:
Dim DotSepFlag as Boolean
If Not Evaluate(CDbl(DBRange.Cells(1, 2)) & ">10") Then
DotSepFlag=True
ElseIf Not Evaluate(CDbl(Replace(DBRange.Cells(i, 1), ",", ".")) & ">10") Then
DotSepFlag=False
Else
MsgBox "anderer Fehler" : Exit For
End If
For i=1 to maxI
If DotSepFlag then
If Not Evaluate(CDbl(DBRange.Cells(1, 2)) & ">10") Then Exit For
ElseIf Not Evaluate(CDbl(Replace(DBRange.Cells(i, 1), ",", ".")) & ">10") Then Exit For
End If
Gruß,
Uwe
Anzeige
AW: Komma oder Punkt - Das ist hier die Frage....
19.02.2007 18:34:00
ingUR
Hallo, Axel,
eine Ergänzung ist zur zweiten Alternative erforferlich, da die Zeile der Fehlerbehandlung "On Error Resume Next" nicht eingefügt wurde
Dim DotSepFlag as Boolean
On Error Resume Next
If Not Evaluate(CDbl(DBRange.Cells(1, 2)) & ">10") Then
DotSepFlag=True
ElseIf Not Evaluate(CDbl(Replace(DBRange.Cells(i, 1), ",", ".")) & ">10") Then
DotSepFlag=False
Else
MsgBox "anderer Fehler" : Exit For
End If
For i=1 to maxI
If DotSepFlag then
If Not Evaluate(CDbl(DBRange.Cells(1, 2)) & ">10") Then Exit For
ElseIf Not Evaluate(CDbl(Replace(DBRange.Cells(i, 1), ",", ".")) & ">10") Then Exit For
End If
Gruß,
Uwe
Anzeige
AW: Komma oder Punkt - Das ist hier die Frage....
19.02.2007 19:16:00
Axel
Hallo,
Danke schon mal fuer die Antworten. Der Grund warum im Beispiel ">10"steht ist zur Vereinfachung des Beispiels, dieser Teil auch von einer String Variablen kommt: Der Benutzer kann den Vergleichs Operator und den Vergleichswert in einer Zelle eingeben. Daher wird der Vergleichsoperator als Stringvariable uebernommen. Dies is auch der Grund warum ich die Evaluate Formel Benutze.
Ich werde mal Uwe's Beispiel versuchen. Idealerweise wuerde ich aber gerne eine "Einzeiler" Loesung finden, da "iMax" sehr gross sein kann (insbesondere mit Excel 2007 :-) )
Gruss, Axel
Danke Uwe!
19.02.2007 20:07:00
Axel
Hallo Uwe,
Danke nochmal, Du hast mich gut inspiriert!
Ich denke ich baue in den Anfang der Procedur einen Test ein der den Delimiter testet, der benutzt wird. In der Schleife benutze ich dann generell deine "Replace" Idee mit dem Delimiter. So kann ich mir den Error test schenken und das sollte auch auf Chinesischen Rechneren laufen... :-)
'Delimiter test am anfang der Funktion
a = 5 / 10
Mydelimiter = Mid(a, 2, 1)
'hier ist dann der loop
If Not Evaluate(CDbl(Replace(DBRange.Cells(i, 1), Mydelimiter, ".")) & ">10") Then Exit For
Koenntest Du das mal testen ob das bei dir laeuft? Ich habe hier nur eine englische Version.
Danke nochmal Uwe!!!
Gruss,
Axel
Anzeige
AW: Komma oder Punkt - Das ist hier die Frage....
19.02.2007 21:05:00
Axel
Das einfachste ist wohl die CCur() Funktion anstelle the CDbl(), die erkennt die localen Settings.....
Gruss,
Axel
AW: Komma oder Punkt - Das ist hier die Frage....
19.02.2007 23:21:06
ingUR
Hallo, Axel,
beim Einsatz der CCur-Typenfunktion ist umbedingt für die entsprechende Anwendung die Gültigkeit der lokalen Einstellungen des Systems bezüglich der Währung für die Operation zu beachten, denn sowohl die Nachkommastellen als auch das Währungszeichen sind dort für die Zahl fest vorgegeben:
CCur(3,91973632007813) = 3,920000000000000 €
auf meinem Rechner.
Gruß,
Uwe
AW: Komma oder Punkt - Das ist hier die Frage....
20.02.2007 08:20:40
Axel
Stimmt Uwe und Danke fuer den Hinweis. Das habe ich gestern Abend auch noch festgestellt. Ich denke ich werde mit der ersten Variante arbeiten (am anfang der Procedur den Delimiter bestimmen), die allerdings noch nicht ganz so laeuft wie ich mir das wuensche. Ich habe einfach mal meine Laendersettings auf deutschland umgestellt und kann das jetzt selber testen.
Danke nochmal fuer Deine Hilfe!
Gruss,
Axel
Anzeige
AW: Komma oder Punkt - Das ist hier die Frage....
20.02.2007 13:09:00
ingUR
Hallo, Axel,
es scheint mir, als wenn Dein Ansatz, den Seperator des DBRange.Cells((...)-Inhalts auf jeden Falls durch den Punkt zu ersetzen, scheint mir in die Falsche Richtung zu gehen, denn diese Funktion übernehmen die Einstellungsparameter der System-Umgebung selbt; Ein Kommer wird bei einsprechender Einstellung an erforderlicher Stelle in einen Punkt gewnadelt, wenn die Einstellung für das Dezimaltrennzeichen entsprechnd ist.
Dein Vorgehen bewirkt nun aber m.E., dass z.B. eine Kommadarstellung in einen Punktdarstellung gewandelt wird, und wenn nun dieser Inhalt an die Sytemroutine "Zahlenbehandlung" übergeben wird, in der je nach Ländereinstellung (hier z.B. Deutsch) das entsprechende Zeichen in einen Punkt verwandelt wird und das Tausendertrenzeichen entfernt wird, dann könnte es zu unerwünschten Effekten auftreten.
Nun könnte ich mir aber eher vorstellen, das ein anderer Fehler vorliegt, dem man eh anders zu Leibe rücken sollte; doch dazu kann man wohl nur etwas sagen , wenn man die Zellenstruktur/-formatierung Deiner DBRange kennt.
Es wäre für das Nachvollziehen hilfreich, wenn Du eine Beispieldatei (Testdatenblatt, relevanter, lauffähifer VBA-Prozedurteil) mit der dieser Prozedurschritt beispielhaft entsprechend der von Dir verwendeten Strukturen getestest werden können, zur Verfügung stellen könntest.
Gruß,
Uwe
Anzeige
AW: Komma oder Punkt - Das ist hier die Frage....
20.02.2007 13:29:00
Axel
Hallo Uwe,
Hier eine kleine Beispieldatei mit dem Konzept (Die eigentliche Datei ist zu komplex.
):
https://www.herber.de/bbs/user/40562.xls
Hier der Code:

Function mytest(inputrng As Range, Criteria As Range) As Variant
a = 1 / 2
DecDel = Mid(a, 2, 1)
b = Replace(CDbl(inputrng), DecDel, ".")
d = Left(Criteria, 1)
c = Replace(CDbl(Right(Criteria.Value, Len(Criteria.Value) - 1)), DecDel, ".")
mytest = Evaluate(b & d & c)
End Function

Das einzig wichtige ist, dass der Benutzer das Dezimalzeichen in der "Parameterzelle" mit dem lokalen Dezimalzeichen eingibt.
Die Evaluate Formel scheint den "." als Dezimalzeichen zu benoetigen. Daher habe ich Deinen "Replace" Vorschlag ausserhalb der Cdbl eingefuegt.
In meiner eigenlichen Datei pruefe ich bei jeder Zelle ob der "VarType" zwischen von 2 (Integer) bis 7 (Datum) liegt. Alle anderen werden nicht mit einbzogen, weil Cdbl sonst einen Fehler gibt.
Das klappt jetzt ganz gut in meiner Datei und numerische Werte und Datumswerte werden korrekt ausgewertet.
Gruss,
Axel
Anzeige

262 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige