我需要对Column_N中的所有值求和,除非满足Column_M中的特定条件。
除了在Sheet0的ColM中找到诸如“ Equipment”和“ other”值之类的内容外,我想将工作表的ColN中的所有内容汇总起来。然后,我需要将该总和放入另一个工作簿的Sheet1的单元格D16中。
(M列中的值可以是任意顺序,并且不一定总是相同的顺序,因此我不能只忽略最后两到三行。)
Col_M Col_N
Static 30
Plan 1850
Main 150
Switch 54.95
Equipment 24.95
Other 4.95
因此,此列N的总和不应为$ 2,114,而应仅为$ 2,084,因为“设备”和“其他”存在于M列中。
这是我当前对列求和的方式:
Dim rng3 As Range
Dim lAnswer As Variant
Set rng3 = wbFrom.Sheets("Sheet0").Range("N9", Range("N9").End(xlDown))
lAnswer = wbFrom.Sheets("Sheet0").Evaluate("SUMPRODUCT(--N9:N50000)")
wbTo.Sheets("Sheet1").Range("D16").Value = lAnswer
我用它来提取匹配发生时的值。我认为我需要将此逻辑更改为,而不是何时匹配,或者何时不匹配-但不确定如何做到这一点。
Dim range1 As Range
LstRw = Cells(Rows.Count, "K").End(xlUp).Row
For Each range1 In wbFrom.Sheets("Sheet0").Range("K9:K" & LstRw)
If range1 = "Construction Costs NRC" Then
wbTo.Sheets("Sheet1").Range("D10") = range1.Offset(0, 10)
End If
Next
'and this
LstRw = Cells(Rows.Count, "Y").End(xlUp).Row
Set List = CreateObject("Scripting.Dictionary")
For Each rng In Range("Y9:Y" & LstRw)
If rng.Offset(0, 0) <> "Company" And rng.Offset(0, 0) <> "" Then
If Not List.exists(rng.Value) Then List.Add rng.Value, Nothing
End If
Next
有没有一种方法可以将这两种思想更好地组合为一点代码?
答案 0 :(得分:0)
因此,我能够根据您的建议进行调整,并得到了答案(是):lAnswer = wbFrom.Sheets("Sheet0").Evaluate("=SUM(P9:P9999) - (SUMIF(K9:K9999,""Static IP MRC"",P9:P9999)+SUMIF(K9:K9999,""Deposit NRC"",P9:P9999))")
但是,仅当我手动将列从常规转换为数字时,此方法才有效。
所以我添加了它,它可以立即转换并工作:
Range("P9:P9999").Select 'specify the range which suits your purpose
With Selection
Selection.NumberFormat = "General"
.Value = .Value
End With
再次感谢您的所有帮助,斯科特!