web-dev-qa-db-ja.com

ExcelでVBAでダブルを切り捨てる

テキストボックスに表示するために、double値の小数点以下の桁数を切り捨てる必要があります。 VBAでこれをどのように実現しますか?

13
Ehudz

VBAのROUNDにはFORMATを使用できます。

たとえば、小数点以下2桁を表示するには

Dval = 1.56789

Debug.Print Round(dVal,2)

Debug.Print Format(dVal,"0.00")

:上記は1.57。だからあなたが探しているなら1.56次に、Dvalを文字列に格納し、これを行うことができます

Dim strVal As String

dVal = 1.56789
strVal = dVal

If InStr(1, strVal, ".") Then
    Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
    Debug.Print dVal
End If
14
Siddharth Rout

round値にしたい場合は、Round関数を使用できます(ただし、VBAのRound関数はBankerの丸め(round-to-evenとも呼ばれます)を使用することに注意してください。 or down;従来の丸めを使用して丸めるには、Formatを使用します。

丸めずにtruncate値にしたい場合、受け入れられた回答のように文字列を使用する必要はありません-数学を使用してください:

Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345

Dim lScale = 10 ^ lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale) / lScale

これにより、「2.34」が生成されます。

12
Gary McGill

Int()関数を使用できます。 Debug.print Int(1.99543)

またはより良い:

_Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
  Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function
_

したがって、Trunc(1.99543, 4) ==> _result: 1.9954_を使用できます

7
Makah

とても楽しい話。私は簡単なVB変換関数をいじっていました。doubleを切り捨てて整数にしたいだけです。

value = Int(83.768)
value == 83

すごい、VBにあるものが実際に機能した。

おっと、私はそれが負の数で動作しないことを忘れました

value = Int(-83.768)
value == -84

...ええ、ちょうどそれが起こりました。 VBはバンカー丸めを使用します。

Public Function Trunc(ByVal value As Double) As Integer
  ' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
  ' Int cannot truncate doubles that are negative
  Trunc = (Abs(value) / value) * Int(Abs(value))
End Function

特定の小数点以下の桁数が必要な場合は、Makahが値の周囲のAbsのみで行ったようにして、Intが適切に切り捨てられるようにします。

Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double
    ' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
    ' Int cannot truncate doubles that are negative
    Dim sign As Integer
    sign = Abs(value) / value
    Trunc2 = sign * (Int(Abs(value) * (10 ^ num)) / (10 ^ num))
End Function
0
justengel