簡體   English   中英

Excel VBA 使用運算符 <,>, >=, <= 和雙打 function ZDBC11CAA4BD5BDA9E2D786

[英]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

另一件事,當我將V1V2聲明為 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 (這是正確的,因為4400444005之間有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM