Board logo

標題: 無條件捨去問題 [打印本頁]

作者: warhead    時間: 2016-7-8 15:49     標題: 無條件捨去問題

請問我要將整頁的數值無條件捨去到小數兩位

       With Temp.Range("C2")
            .Value = Format(.Value, "0.00")
        End With

可以執行,但是寫成以下就為失敗

       With Temp.Range("C2:C10")
            .Value = Format(.Value, "0.00")
        End With

原因是出在哪邊呢?
作者: jackyq    時間: 2016-7-8 18:35

Format 參數不能是陣列
作者: Scott090    時間: 2016-7-9 07:25

回復 1# warhead

format(.value,"0.00") 會四捨五入,不會無條件捨去

下列會得到 Range 區域 的 數值 格式 小數點以下2位
      With Temp.Range("C2:C10")
            . .NumberFormatLocal = "0.00"
        End With
作者: warhead    時間: 2016-7-10 08:36

我將他跟VLOOKUP一起使用就可以得到我要的結果了
       With Temp.Range("C2:C10")
            .Value = "=ROUNDDOWN(VLOOKUP(A3,Temp!A:T,3,0),2)
            .NumberFormatLocal = "0.00"
        End With

只是我單獨使用ROUNDDOWN 跟 FORMAT一樣不能使用在陣列,
但是ROUNDDOWN跟VLOOKUP一起使用卻可以?
作者: PKKO    時間: 2016-7-10 12:09

回復 4# warhead

資料量不大,或是不考慮執行速度可以用下列
  1. Sub TEST()
  2. For Each E In Range("A1:A2")
  3.     E.Value = Application.WorksheetFunction.Round(E.Value, 2)
  4. Next
  5. End Sub
複製代碼
考量速度,建議用陣列處理完畢之後再一次性輸出
作者: Scott090    時間: 2016-7-11 07:45

回復 4# warhead

這是不是你要的?

Dim c
For Each c In Temp.UsedRange
    c.Value = IIf(c <> 0, Application.RoundDown(c, 2), "")
Next
作者: ikboy    時間: 2016-7-11 15:42

如確實按無條件捨去處理, 不能用 round
  1. Sub zz()
  2. Dim a, c
  3. a = [a1].CurrentRegion
  4. For Each c In a
  5.     Debug.Print Int(c * 100) / 100
  6. Next
  7. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)