Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Re: 取得したタイムについて のrinahanaさんへ
投稿日時: 19/07/26 07:48:32
投稿者: simple

取得したタイムについて
https://www.moug.net/faq/viewtopic.php?t=78469
 
 
> コード自体は全く 皆さんが原因かなと思われるような難しいことは一切していなくて、
> 「now()」をsingle型に記憶して、
> それを該当セルに表示するだけなので・・・

それがどうして
Range("C6") = Now() ’必要なデータは hhmm ですが、年月日も使っています。
というコードになるのでしょうか。
全然、single型に記憶していないじゃないですか。
 
前向きな話として、
1. なぜ singleにしたのですか?
  参考にしたものがそうなっていたからですか?
 
2. doubleとsingleの差は理解していますか?
 
3. Now() - Date()などとして、時刻だけに焦点を当てる場合は
    Singleでも十分ということはわかりますか?
    日付情報を同時に持つことによって、誤差が生じるのですが、
    その辺はわかりますか?

回答
投稿日時: 19/08/13 13:40:51
投稿者: rinahana

simpleさんへ
長らく MOUGのサイトに目をとおしていませんでした。ごめんなさい。
単精度実数、倍精度実数の鮮度の差であることは、十分分かっているつもりです。
エクセルの時間が1未満で小数点で表されていることも知っていましたが、迂闊にも時間(分)のレベルが単精度では正確には表せていないことを考えていませんでした。
教えていただいた皆さんには本当に失礼しました。
これに 懲りずに今後とも宜しくお願いします。

投稿日時: 19/08/13 22:26:57
投稿者: simple

閉じなくてよかったです。コメントありがとうございます。
 
Singleを使った理由については書かれていませんでしたが、
メモリを心配するような必要性はまったくないはずです。
整数はIntegerではなく、すべてLongで良いと思いますし、
実数はDouble一本で問題ないはずです。ワークシート上の数値もDoubleです。
 
下記のテスト結果も参考にして下さい。

Sub test()
    Dim t  As Double
    Dim s1 As Single
    Dim s2 As Single
    
    t = Now()
    s1 = t
    Debug.Print t; s1
    ' 43690.9334606482  43690.93

    t = t - Date
    s2 = t
    Debug.Print t; s2
    '0.933460648149776  0.9334607
End Sub

投稿日時: 19/08/13 22:35:01
投稿者: simple

閉じます。