Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


28183 / 76732 ←次へ | 前へ→

【53852】Re:条件式
発言  ichinose  - 08/2/11(月) 22:52 -

引用なし
パスワード
   こんばんは。

達人さん日替わり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 になります。

それでも小数は要注意なんですが、おもしろいなあと思ったもので
投稿しました。

0 hits

【53746】条件式 多摩川 08/2/5(火) 17:08 質問
【53747】Re:条件式 Jaka 08/2/5(火) 17:30 発言
【53748】Re:条件式 多摩川 08/2/5(火) 17:30 質問
【53749】Re:条件式 多摩川 08/2/5(火) 17:43 質問
【53755】Re:条件式 りん 08/2/5(火) 21:11 発言
【53756】Re:条件式 VBWASURETA 08/2/5(火) 21:17 発言
【53758】Re:条件式 ichinose 08/2/5(火) 21:48 発言
【53759】Re:条件式 追伸 ichinose 08/2/5(火) 21:52 発言
【53760】Re:条件式 訂正 ichinose 08/2/5(火) 22:11 発言
【53764】Re:条件式 多摩川 08/2/6(水) 9:06 お礼
【53852】Re:条件式 ichinose 08/2/11(月) 22:52 発言
【53855】Re:条件式 多摩川 08/2/12(火) 8:50 お礼

28183 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free