2016-11-25 317 views
3

我在VBA中有一些问题sumifsSUMIFS在Excel的VBA

Dim Arg1 As Range 'the range i want to sum 
Dim Arg2 As Range 'criteria range 
Dim Arg3 As Variant 'the criteria 

Set Arg1 = ThisWB.Sheets("Sheet1").Range("B2:B100") 
Set Arg2 = ThisWB.Sheets("Sheet1").Range("C1:C100") 
Set Arg3 = ThisWB.Sheets("Sheet2").Range("A2:A12") 

For i = 2 To 12 
Workbooks("x.xlsx").Worksheets("Sheet2").Cells(i, LastColumn) _ 
= Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3) 


Next 

我总是得到一个“类型不匹配”错误

任何人可以帮我修复代码?

预先感谢您。

回答

2

https://msdn.microsoft.com/en-us/library/office/ff193011.aspx

Sub test() 
    Dim Arg1 As Range 'the range i want to sum 
    Dim Arg2 As Range 'criteria range 
    Dim Arg3 As Variant 'the criteria 

    'Arg1 and Arg2 must be the same size 
    Set Arg1 = Sheets("Sheet1").Range("B2:B100") 
    Set Arg2 = Sheets("Sheet1").Range("C2:C100") 

    'this is the criteria 
    Arg3 = "=False" 

    Dim ws As Worksheet 
    Set ws = ActiveSheet 
    Dim i As Integer 
    For i = 2 To 12 
     ws.Cells(i, 8).Value = Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3) 
    Next 
End Sub 

还可以指定ARG3作为变体,并通过单小区范围,如果它具有标准。标准可以是True/False(= False),数字(20)或字符串(“> 100”)。

Dim Arg3 As Variant 'the criteria 
    Arg3 = Sheets("Sheet2").Range("A2") 

编辑:我意识到你正在尝试做什么。 Arg3中的每个单元格都是一个单独的标准,您要执行SumIf。这是修改后的代码。

Sub test2() 
    Dim ThisWB As Workbook: Set ThisWB = ThisWorkbook 
    Dim i As Integer 
    Dim LastColumn As Integer: LastColumn = 3 

    Dim Arg1 As Range 'the range i want to sum 
    Dim Arg2 As Range 'criteria range 
    Dim Arg3 As Range 'the criteria (range) 

    Set Arg1 = ThisWB.Sheets("Sheet1").Range("B2:B100") 
    Set Arg2 = ThisWB.Sheets("Sheet1").Range("C2:C100") 
    Set Arg3 = ThisWB.Sheets("Sheet2").Range("A2:A12") 

    For i = 2 To 12 
     Workbooks("x.xlsx").Worksheets("Sheet2").Cells(i, LastColumn) _ 
      = Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3.Cells(i - 1, 1).Value) 
    Next 
End Sub 

请注意在SumIfs Arg3.Cells(i - 1, 1).Value中如何使用Arg3。另请注意,Arg1和Arg2必须具有相同的大小。

+0

我尝试了溶剂化,但它不起作用:下标超出范围。你有什么主意吗?预先感谢您 –

+0

您需要找出哪条线和哪个项目超出范围。你真的有一个名为“x.xlsx”的工作簿已经打开吗?你有“Sheet2”吗?等代码工作得很好,所以有些不同。如果你不能解决问题另一个问题。你的SumIf问题(不匹配错误)已经解决了。现在您正在询问超出范围的错误;这是一个单独的问题,需要成为一个单独的问题。 –

+0

是的,你是对的。我在尝试代码时犯了一个错误。现在我再次尝试一次,注意力更强,它正在工作。所以非常感谢! –