2016-11-25 6 views
3

ich ein Problem mit sumifs in vba habe:SUMIFS in 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 

Ich bekomme immer einen "Konflikt" Typenfehler

Kann mir jemand helfen, den Code zu beheben?

Vielen Dank im Voraus.

Antwort

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 

Sie auch Arg3 als Variante und passieren einen Einzelzellbereich, wenn sie die Kriterien haben angeben können. Kriterien können True/False (= False), eine Zahl (20) oder eine Zeichenfolge ("> 100") sein.

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

EDIT: Ich erkannte, was Sie versuchten zu tun. Jede Zelle in Arg3 ist ein separates Kriterium, das Sie SumIf ausführen möchten. Hier ist der überarbeitete Code.

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 

Beachten Sie, wie Arg3 in SUMIFS Arg3.Cells(i - 1, 1).Value verwendet wird. Beachten Sie auch, dass Arg1 und Arg2 dieselbe Größe haben müssen.

+0

Ich versuchte die Lösung, aber es funktioniert nicht: Index außerhalb des Bereichs. Hast du irgendeine Idee? Vielen Dank im Voraus –

+0

Sie müssen herausfinden, welche Linie und welches Element außerhalb der Reichweite ist. Haben Sie bereits eine Arbeitsmappe mit dem Namen "x.xlsx" geöffnet? Hast du ein "Blatt2"? usw. Der Code funktionierte gut für mich, also ist etwas anders. Wenn Sie es nicht herausfinden können, stellen Sie eine andere Frage. Ihr SumIf-Problem (Mismatch-Fehler) ist bereits gelöst. Jetzt fragen Sie nach einem Fehler außerhalb des zulässigen Bereichs. Das ist ein separates Problem und muss eine separate Frage sein. –

+0

Ja, du hattest Recht. Ich habe einen Fehler gemacht, als ich den Code ausprobiert habe .. Jetzt versuche ich es nochmal mit mehr Aufmerksamkeit und es funktioniert .. Also vielen Dank! –

Verwandte Themen