|
こんばんは。
達人さん日替わりQ
hp.vector.co.jp/authors/VA016119/xlq/q10211.html
を見て改めてこのご質問とちょっと前のご質問だった
www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=53662;id=excel
この事が気になり検証してみました。
但し、達人さん日替わりQは一日で替わってしまうので
ログがあるのかなあ?
申し上げたかったのは、
数式の小数誤差がコピー&値の貼り付けで丸められていると言う事実です。
多摩川さん御提示のコードも
Sub sample1()
Range("a1").Value = 0.1
Range("a2:a20").Formula = "=a1+0.1"
MsgBox "a20=2 の判定は " & (Range("a20").Value = 2)
With Range("a20")
.Value = .Value 'ここで値に変換すると
End With
MsgBox "再度、a20=2 の判定は " & (Range("a20").Value = 2)
End Sub
本来の結果をもたらします。
又、映画館スタッフさんが問題にしたコードも
Sub main2()
Dim time1 As Date, time2 As Date
time1 = CDate("23:01")
time2 = CDate("23:00")
'time1 を5分単位に切り下げ
time1 = WorksheetFunction.Floor(time1, CDate("0:05"))
With Range("a1")
.Value = time1
.Value = .Value '値を改めて代入しなおすと・・・
time1 = .Value '値を代入しなおしたデータを変数に移して
End With
If time1 = time2 Then
Debug.Print "ok"
Else
Debug.Print "no"
End If
End Sub
これだとちゃんとok になります。
それでも小数は要注意なんですが、おもしろいなあと思ったもので
投稿しました。
|
|