将N列中所有值的总和除(M列中满足特定条件的情况除外)

时间:2018-07-11 14:18:20

标签: excel vba excel-vba

我需要对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

有没有一种方法可以将这两种思想更好地组合为一点代码?

1 个答案:

答案 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

再次感谢您的所有帮助,斯科特!