【问题标题】:SUMIF with variable range具有可变范围的 SUMIF
【发布时间】:2014-05-08 12:23:17
【问题描述】:

我想编写这个简单的代码,但我没有找到任何解决方案。

我有一个循环来迭代工作表的所有行,并且对于每次迭代我都想做一个 sumif,但范围是可变的。

所以我想要这样的东西:

Dim row,MaxColumn as Integer
MaxColumn = 5
For row= 1 to 5
ActiveSheet.Cells(row, MaxColumn + 1).Select
ActiveCell.Formula = "=SUMIF("B2:D(here I want a variable D1 to 5 range with row variable),""=1"")"

next row

我不知道如何完成这个。

我知道我可以使用它来选择带有变量的范围,但我不能在 SUMIF 上使用它。

ActiveSheet.Range("B" & row & ":D" & row)

【问题讨论】:

  • 相同单元格的公式更改5次有什么意义?如果您在其他地方更改活动单元格,请向我们展示更多代码..
  • 我省略了一些部分以便于理解我想要什么
  • 1) How to avoid using Select/Active statements 2) 行中的 Dim row,MaxColumn as Integer 变量 row 的类型为 Variant。将其更改为 Dim row as Integer,MaxColumn as Integer 3) 您可以在整个范围内应用不带循环的公式:Range(A1:A5).Formula="=SUMIF(B1:D1,1)" 并且 excel 会自动为每个单元格/行调整它

标签: excel vba variables range


【解决方案1】:

你可以像Range("B2:D2").Address这样得到一个范围的地址
这将产生一个绝对范围$B$2:$D$2

你可以通过 True/False 来获取相对地址Range("B2:D2").Address(False, False)
产生范围B2:D2

这是一个例子:

Dim TotalRows As Long
Dim i As Long

' Get the total number of rows in the current sheet
TotalRows = ActiveSheet.UsedRange.Rows.Count

' Iterate through all rows
For i = 1 To TotalRows
    ' Set the current cells formula range to Bi:Di where i = the current row
    Range("A" & i).Formula = "=SUMIF(" & Range("B" & i & ":D" & i).Address(False, False) & ", 1)"
Next

或者,您可以像这样设置范围的公式:
Range("A1:A4").Formula = "=SUMIF(B1:D1,1)"

Excel 会根据您的行自动增加范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多