[英]Excel VBA use operators <,>, >=, <= with doubles as function arguments
幾分鍾前我發布了一個關於這個問題的問題,並決定創建一個新的問題,更好地描述這個問題。 所以我准備了一個簡單的工作表:
在G4
(綠色)上,我放置了公式=SUMIFS(B1:B20;A1:A20;">="&E4;A1:A20;"<"&E5)
並且效果很好。
單元格E4
(藍色)由腳本填充:
Sub Button1_Click()
Dim SH As Worksheet: Set SH = ThisWorkbook.Sheets("Sheet1")
Dim R1 As Range: Set R1 = SH.Range(SH.Cells(1, 1), SH.Cells(20, 1))
Dim R2 As Range: Set R2 = SH.Range(SH.Cells(1, 2), SH.Cells(20, 2))
Dim V1 As Double: V1 = SH.Cells(4, 5).Value
Dim V2 As Double: V2 = SH.Cells(5, 5).Value
SH.Cells(5, 7).FormulaR1C1 = WorksheetFunction.SumIfs(R2, R1, ">=" & V1, R1, "<" & V2)
End Sub
很容易看出該值也應該是18
。 但是它的評估結果為0
。
另一件事,當我將V1
和V2
聲明為 long 時:
Dim V1 As Long: V1 = Int(SH.Cells(4, 5).Value)
Dim V2 As Long: V2 = Int(SH.Cells(5, 5).Value)
單元格E4
(藍色)的計算結果為17
(這是正確的,因為44004
和44005
之間有17
值)。
有人知道嗎? 對我來說它看起來像一個錯誤......
從您的屏幕截圖中,您的小數點是,
。
當您將字符串與數字連接時,例如在">=" & V1
中,數字將使用當前語言環境轉換為字符串。 您當前的語言環境具有,
作為小數點,因此您最終得到">=44004,2"
。
在內部 Excel 根據 en-us 語言環境存儲所有公式,其中使用.
為小數點。 這些可以通過.Formula
和.FormulaR1C1
屬性訪問。
Excel 界面顯示這些公式轉換為您的語言環境。 這些可以通過.FormulaLocal
和.FormulaR1C1Local
屬性訪問。
WorksheetFunction
下的函數只需要真正的內部 en-us arguments。 當您將">=44004,2"
作為參數傳遞時,它會導致計算失敗,因為 function 應為">=44004.2"
。 結果為零表示過濾器格式錯誤。
所以你應該給它:
= WorksheetFunction.SumIfs(R2, R1, ">=" & Str$(V1), R1, "<" & Str$(V2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.