2016-11-25 4 views
3

У меня есть некоторые проблемы с sumifs в УВА:SUMIFS в 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") 

EDIT: Я понял, что вы пытались сделать. Каждая ячейка в 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 

Обратите внимание, как Arg3 используется в SUMIFS Arg3.Cells(i - 1, 1).Value. Также обратите внимание, что Arg1 и Arg2 должны быть одного размера.

+0

Я пробовал сольватацию, но он не работает: Подстрочный код вне диапазона. Есть ли у вас какие-либо идеи? Заранее спасибо –

+0

Вам нужно выяснить, какая линия и какой элемент находится за пределами допустимого диапазона. У вас на самом деле уже есть рабочая книга с именем «x.xlsx»? У вас есть «Sheet2»? и т. д. Код работал отлично для меня, поэтому что-то другое. Если вы не можете понять это, задайте другой вопрос. Ваша проблема SumIf (ошибка несоответствия) уже решена. Теперь вы спрашиваете об ошибке вне диапазона; это отдельная проблема и должен быть отдельным вопросом. –

+0

Да, ты был прав. Я ошибся, попробовав код. Теперь я снова попробую снова с большим вниманием, и он работает. Так что большое спасибо! –