Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1452to1456
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

3*0,3=0,9...ODER????

3*0,3=0,9...ODER????
29.10.2015 00:24:31
PQuest:-)

Hallo,
ich habe gerade ein kurioses Ergebnis in meinem Code

Public Sub CalendarColor()
Dim CalRow As Long, CalLastRow As Long 'first/last Row Calendar
Dim CalCol As Long, CalLastCol As Long 'first/last Column Calendar
Dim LoPRow As Long, LoPLastRow As Long 'first/last Row LoP
Dim LoPCol As Long, LoPLastCol As Long 'first/last Column LoP
Dim wsLoP As Worksheet, wsCal As Worksheet
Dim CalDay As Range 'Date from Calendar
Dim Counter As Double 'Counter for hits in LoP
Dim rngLoPDates As Range 'Date Area in LoP
Dim rngCalArea As Range 'Calendar Area
Dim rngValence As Range 'Row with valence of columns
Set wsLoP = Worksheets("ListOfPatients")
Set wsCal = Worksheets("Calendar")
CalRow = 2
CalCol = 1
With wsCal
CalLastRow = .Cells(Rows.Count, CalCol).End(xlUp).Row
CalLastCol = .Cells(CalRow, Columns.Count).End(xlToLeft).Column
Set rngCalArea = .Range(.Cells(CalRow, CalCol), .Cells(CalLastRow, CalLastCol))
End With
LoPRow = 8
LoPCol = 4
LoPLastCol = 20
With wsLoP
LoPLastRow = .Cells(Rows.Count, CalRow).End(xlUp).Row
Set rngValence = .Range(.Cells(6, LoPCol), .Cells(6, LoPLastCol))
Set rngLoPDates = .Range(.Cells(LoPRow, LoPCol), .Cells(LoPLastRow, LoPLastCol))
End With
For Each CalDay In rngCalArea
If IsEmpty(CalDay) Or CLng(CalDay.Value) < 42004 Then
Counter = 0
Else
Counter = DaysCount(CalDay, rngLoPDates, rngValence)
End If
If Counter > 1 Then
CalDay.Interior.ColorIndex = 1 'black; blue = 5; big mistake workamount overflow
ElseIf Counter = 1 Then
CalDay.Interior.ColorIndex = 3 'red
ElseIf Counter > 0.89999999 And Counter < 0.9 Then ' 3*0,3=0,9 ODER?
CalDay.Interior.ColorIndex = 46 'orange
ElseIf Counter = 0.6 Then
CalDay.Interior.ColorIndex = 6 'yellow; smooth yellow = 44
ElseIf Counter = 0.3 Then
CalDay.Interior.ColorIndex = 4 'green; smooth green = 43
Else
CalDay.Interior.ColorIndex = 0
End If
Next
End Sub
Function DaysCount(sDate, DateArea As Range, ColValence As Range) As Double
Dim arrDateArea
Dim arrColValence
Dim r As Long, c As Long 'c=Column, r=Row
Dim Val As Double
arrDateArea = DateArea.Value 'Array DateArea mit DateArea füllen (Datumsbereich im LoP)
arrColValence = ColValence.Value 'Array ColValence mit ColValence füllen (Spaltenwertigkeit)
DaysCount = 0
For r = 1 To UBound(arrDateArea, 1)
Val = 0
For c = 1 To UBound(arrDateArea, 2)
If arrDateArea(r, c) = sDate Then _
Val = WorksheetFunction.Max(Val, arrColValence(1, c))
Next
DaysCount = DaysCount + Val
Next
End Function
In der Funktion wird nur mit den Werten 0,3 und 1 gerechnet.
Die Kuriosität tuacht bei der Auswertung und Farbgebung auf
If Counter > 1 Then
CalDay.Interior.ColorIndex = 1 'black; blue = 5; big mistake workamount overflow
ElseIf Counter = 1 Then
CalDay.Interior.ColorIndex = 3 'red
ElseIf Counter > 0.89999999 And Counter < 0.9 Then ' 3*0,3=0,9 ODER?
CalDay.Interior.ColorIndex = 46 'orange
ElseIf Counter = 0.6 Then
CalDay.Interior.ColorIndex = 6 'yellow; smooth yellow = 44
ElseIf Counter = 0.3 Then
CalDay.Interior.ColorIndex = 4 'green; smooth green = 43
Else
CalDay.Interior.ColorIndex = 0
In das 2te elseif würde ich gerne 0.9 schreiben, so wie es analog bei 0.6 und 0.3 funktioniert, sollte es doch auch hier gehen.
Weit gefehlt. Ich kann an dieser Stelle nur mit einem Bereich arbeiten. Alles anders schlägt fehl.
Wo ist der Fehler?
Gruß,
PQuest:-)

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Counter > 0.89999999 And Counter < 0.9 ?? owT
29.10.2015 00:32:47
Matthias L

AW: Counter > 0.89999999 And Counter < 0.9 ?? owT
29.10.2015 01:15:31
PQuest:-)
Wenn ich
ElseIf Counter = 0.9
eingebe, stimmen die Ergebnisse nicht.
Mit
Counter > 0.89999999 And Counter < 0.9
funktioniert es einwandfrei.

AW: 3*0,3=0,9...ODER????
29.10.2015 00:34:41
Daniel
Hi
in jedem Zahlensystem gibt es Zahlen, die sich bei begrenztem Speicherplatz nicht exakt, sondern nur mit einer gewissen Ungenauigkeit beschreiben lassen.
Beim Rechnen mit Computern kommt erschwerend hinzu, dass die Werte auch noch zwischen zwei Zahlensystemen umgerechnet werden müssen, so dass die ungenauigkeiten von beiden Systemen sich kombinieren.
Gruss Daniel

AW: 3*0,3=0,9...ODER????
29.10.2015 01:00:53
PQuest:-)
Somit hätten wir die Unschärfe von Excel bei 0.9 belegt :-)
Ist das bekannt oder bin ich da auf etwas neues gestossen? ;-)
Grüße,
PQuest:-)

Anzeige
Das ist nichts Neues und sollte allgemein ...
29.10.2015 01:19:45
Luc:-?
…bekannt sein, Peter;
deshalb rundet man ja auch vor Vglen! ;-)
Gruß, Luc :-?

AW: Das ist nichts Neues und sollte allgemein ...
29.10.2015 01:31:12
PQuest:-)
Das habt ihr euch doch gerade ausgedacht :-)))))

Wenn du meinst... ;-) owT
29.10.2015 02:36:48
Luc:-?
:-?

Klar: Am 30. Geburtstag von IEEE 754 !! (owT)
29.10.2015 08:05:18
EtoPHG

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige