将sumif公式从excel转换为宏vba - 问题2:转换单元格范围

时间:2013-03-20 09:20:54

标签: excel formula

当我在下面运行代码时

Sub test2() Dim i, 
Rownumber As Integer 
Rownumber = Sheets("Sheet4").Range("A65536").End(xlUp).Row

    For i = 2 To Rownumber

            Sheets("Sheet4").Cells(i, 3).Formula = "=sumif(Sheet3!$A$2:$A$10, Sheet4!A2, Sheet3!$B$2:$B$10)"

        Next i
         End Sub

宏运行良好,但当我将其转换为宏VBA时:

Sub test2()
Dim i, Rownumber As Integer
Rownumber = Sheets("Sheet4").Range("A65536").End(xlUp).Row

For i = 2 To Rownumber

        Sheets("Sheet4").Cells(i, 3).Value = Application.WorksheetFunction.SumIfs(Sheets("Sheet3").Range("A2:A10"), Sheets("Sheet4").Cells(2, 1), Sheets("Sheet3").Range("B2:B10"))

    Next i

End Sub

它给了我错误 - > 运行类型错误13,输入missmatch

为什么会发生这种情况以及如何解决这个问题? - 已关闭

由于

问题2

以下代码在执行时运行良好:

 For j = 3 To Colnumber

            For i = 2 To Rownumber
            Sheets("Sheet2").Cells(i, j).Value = Application.WorksheetFunction.SumIfs(Sheets("3G").**Range("F2:F6991")**, Sheets("3G").Range("E2:E6991"), Sheets("Sheet2").Cells(i, 1))


            Next i

        Next j

但是为什么我把它改成:

Sheets("Sheet2").Cells(i, j).Value = Application.WorksheetFunction.SumIfs(Sheets("3G").**Range(Cells(2, 6), Cells(6991, 6))**, Sheets("3G").Range("E2:E6991"), Sheets("Sheet2").Cells(i, 1))

它给了我错误:错误1004,应用程序定义或定义对象错误??

TIA

1 个答案:

答案 0 :(得分:0)

SumIf不是SumIfs。参数的顺序不同,从而导致错误。

SumIfs从要求总和(多细胞范围)的范围开始,然后是成对的标准范围(多细胞范围)和标准(单细胞)。

SumIf从Criteria Range开始,然后是Criteria(单个单元格),然后是要求总和的范围(多个单元格范围)。

通过相应地交换参数的顺序或使用其他函数(SumIf而非SumIfs

来修复它