Visual Basic で 10 進数が切り捨てられるのを防ぎ、科学的表記法で切り捨てられた数値ではなく完全な 10 進数として保持するにはどうすればよいですか?
誰かのために変更している Excel マクロからのこの小さなコードがあります (Debug.Print ステートメントのみが私のものです)。
rttime = asht.Cells(i, timecol).Value
Debug.Print "rttime=" & rttime
Debug.Print "To string: " & CStr(CDec(rttime))
rtdelta = rttime - wavonset_value 'searchcol="AOISlide2"
Debug.Print "rtdelta=" & rtdelta
Debug.Print ステートメントは私に与えます:
rttime=1.343301E+12
To string: 1343301000000
rtdelta=0
つまり、基本的にここで起こっていることは、値が科学表記法で Excel ワークシートから取得され、その表記法に表示されていないものはすべて切り捨てられているということです。
実際の数値は1343300687515.39である必要がありますが、強制的に1.343301E+12に下げられており、科学表記法から強制しても1343301000000になります。
小数点とすべてを含む実際の数値にするにはどうすればよいですか? 場合によっては 20 程度の差しかない場合もあるため、この側面は実際には必要ですが、数百万の位に切り捨てられるため、まったく役に立ちません。
編集:参照用の関数全体を次に示します
Function GetAOIRowStart(asht As Worksheet, startrow&, endrow&, searchstr$, searchcol&,
AOItime_start As Single) As Long
Dim i&
Dim rtdelta As Single
Dim rttime As Single
Dim wavonset_value As Single
Dim timecol&
timecol = 4
wavonset_value = asht.Cells(startrow, timecol).Value 'tettime
Debug.Print "wavonset_value=" & wavonset_value
i = startrow
Do Until i >= endrow
'scan down TeTTime' column to find nearest look of interest
rttime = asht.Cells(i, timecol).Value
Debug.Print "rttime=" & rttime
Debug.Print "To string: " & CStr(CDec(rttime))
rtdelta = CDec(Right(rttime, 9)) - CDec(Right(wavonset_value, 9)) 'searchcol="AOISlide2"
Debug.Print "rtdelta=" & rtdelta
If rtdelta >= AOItime_start Then
Exit Do
End If
i = i + 1
Loop
GetAOIRowStart = i
'Debug.Print asht.Cells(i, sound_playing_col).Value
End Function