【问题标题】:Stuck trying to build a sumifs in vba试图在 vba 中构建 sumifs
【发布时间】:2018-06-08 01:53:05
【问题描述】:

我目前正在尝试自学一些基本的 excel vba,但我被困在 sumifs 上。

我在同一个工作簿中有两个工作表(Sheet1 和 Sheet2)。 我试图让单元格 Sheet 1 D4:D20 根据两个标准汇总表 2 中的数据。第一个标准 (Y) 是可变的并存储在 Sheet1 C4:C20 中,而第二个标准是 E。不幸的是,当我尝试计算最后一行时,我不断出错。 到目前为止我所拥有的是:

Sub Test_Sumifs()

Dim EndRow As Long
Dim i As Integer

EndRow = Cells(row.Count, "C").End(x1Up).row

Set SumRange = Worksheets("Sheet2").Range("D2:D17")
Set Criteria1 = Worksheets("Sheet2").Range("B2:B17")
Set Criteria2 = Worksheets("Sheet2").Range("C2:C17")

For i = 4 To EndRow
  Cells(i, 4).Value = WorksheetFunction.SumIfs(SumRange, Criteria1, [C4], Criteria2, ["E"])

Next i
End Sub

我环顾四周并尝试了各种方法,但无法找出问题所在。

非常感谢您的帮助,

【问题讨论】:

  • 什么错误,在哪一行?
  • 我的错误应该指定,错误是 EndRow = Cells(row.Count, "C").End(x1Up).row 上的错误 424,我也不确定以下是否工作表功能标准 1,[C4] 正在工作,或者如果 excel 只是将所有内容与 C4 进行比较,而不是向下到每个单元格
  • 对于初学者来说,它应该是End(xlUp),带有 L 而不是 1。
  • 不应该row.Countrows.Count
  • 另外,看起来你想给单元格的值是函数和值的组合......

标签: vba excel


【解决方案1】:
Option Explicit

Sub TestSumifs()

    Dim EndRow As Long
    Dim i As Long

    EndRow = Cells(Rows.Count, "C").End(xlUp).Row
    Dim sumRange As Range
    Dim criteria1 As Range, criteria2 As Range

    Set sumRange = Worksheets(2).Range("D2:D17")
    Set criteria1 = Worksheets(2).Range("B2:B17")
    Set criteria2 = Worksheets(2).Range("C2:C17")
    Dim wf As WorksheetFunction

    For i = 4 To EndRow
        Cells(i, 4) = wf.SumIfs(sumRange, criteria1, Range("C4"), criteria2, "E")
    Next i

End Sub
  • x1Up 在 VBA 中确实不存在(Although there are 110 questions containing it。知道为什么以及如何操作吗?)
  • EndRow = Cells(Rows.Count, "C").End(xlUp).Row - 这将正确返回 C 的最后一行
  • Option Explicit - 强制声明变量

【讨论】:

  • 非常感谢代码运行完美。我还在没有“选项显式”的情况下对其进行了测试,它似乎仍然有效。由于excel中的字体,我认为它是x1Up。 l 和 1 看起来非常相似。
  • @Ario 这是 VBE 的字体,而不是 Excel。如果您愿意,可以将其更改为 Comic Sans(天哪,但不要!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多