【问题标题】:Syntax for If Then SUMIFSIf Then SU​​MIFS 的语法
【发布时间】:2022-10-23 13:54:55
【问题描述】:

在下面的代码中,我确定了一个范围 (ColRng),我想在其中检查每个单元格 - 如果它为空,则执行一个 SUMIFS 函数。这没用。我知道我的语法和逻辑很糟糕,但我不知道如何让它发挥作用。

Dim ColRng As Range
Dim LastCol As Long
Dim LastRowScenario As Long
Dim x As Long
Dim rngCrit1 As Range
Dim rngCrit2 As Range
Dim rngSum As Range

LastRowScenario = Sheets("Sheet1").Range("Q2").End(xlDown).Row

Set rngCrit1 = Sheets("Sheet1").Range("D2:D" & LastRowScenario)
Set rngCrit2 = Sheets("Sheet1").Range("B2:B" & LastRowScenario)
Set rngSum = Sheets("Sheet1").Range("Q2:Q" & LastRowScenario)

LastCol = Sheets("Summary").Range("B5").End(xlToRight).Column
Set ColRng = Range(LastCol & "6:" & LastCol & "149")

For x = ColRng.Cells.Count To 1 Step -1
    With ColRng.Cells(x)
        ' If the cell is empty, perform a SUMIFS
         If IsEmpty(.Value) Then
  .Formula = Application.WorksheetFunction.SumIfs(rngSum, rngCrit1, .Range("E" & .Row).Value, rngCrit2, .Range("B" & .Row).Value)
        End If
    End With
Next x

【问题讨论】:

  • 它做了什么不正确的?
  • 带有 SUMIFS 函数的行会引发“应用程序定义的或对象定义的错误”。我不知道如何使此函数应用于由 If then 检查的单元格。
  • 删除所有ActiveCell 并将Application. 放在WorksheetFunction 前面:.Formula = Application.WorksheetFunction.SumIfs(rngSum, rngCrit1, .Range("E" & .Row).Value, rngCriteria2, .Range("B" & .Row).Value) 这是假设其他变量都是正确的,因为您没有包括它们的声明或设置方式。
  • 同样的错误。已编辑原始帖子以包含我的定义。
  • 删除 SUMIFS 内 Ranges 前面的 .

标签: excel vba


【解决方案1】:

您的 ColRng 构造错误 - 请尝试以下操作:

Dim ColRng As Range
Dim LastCol As Long
Dim LastRowScenario As Long
Dim x As Long
Dim rngCrit1 As Range
Dim rngCrit2 As Range
Dim rngSum As Range, ws As Worksheet, wsSumm As Worksheet

set ws = Sheets("Sheet1")

Set rngSum = ws.Range("Q2:Q" & ws.Range("Q2").End(xlDown).Row)
Set rngCrit1 = rngSum.EntireRow.Columns("D")
Set rngCrit2 = rngSum.EntireRow.Columns("B")

Set wsSumm = Sheets("Summary")
With wsSumm.Range("B5").End(xlToRight).EntireColumn
    Set ColRng = wsSumm.Range(.Cells(6), .Cells(149))
End With

For x = ColRng.Cells.Count To 1 Step -1
    With ColRng.Cells(x)
        ' If the cell is empty, perform a SUMIFS
         If IsEmpty(.Value) Then
             .Formula = Application.SumIfs(rngSum, _
                  rngCrit1, .EntireRow.columns("E").Value, _
                  rngCrit2, .EntireRow.columns("B").Value)
        End If
    End With
Next x

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 2015-08-20
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2018-08-02
    • 2022-01-22
    相关资源
    最近更新 更多