Критерии Sumif с циклом for в VBA

Dim i As Integer, j As Integer, k As Integer, l As Integer

i = ActiveSheet.PivotTables(1).TableRange2.Rows.Count + 1
j = ActiveSheet.PivotTables(1).TableRange2.Columns.Count 
k = ActiveSheet.PivotTables(1).TableRange2.Rows.Count - 7 

For l = 2 To j
    Cells(i + 2, l).Value = WorksheetFunction.SumIf(Range(Cells(9, l), Cells(i, l)), ">0", Range(Cells(9, l), Cells(i, l)))
Next l

Привет, я пытаюсь использовать функцию sumif в vba. Дело в том, чтобы сделать это в цикле, который зависит от количества столбцов. Я не знаю, что здесь не так, но я думаю, что, вероятно, что-то с критериями, которые я взял. Я хочу суммировать все ячейки с числом выше 0 и не знаю, как это написать.


person Cezary    schedule 16.12.2016    source источник
comment
но внутри вашего SumIf диапазон Range(Cells(9, 2), Cells(i, 2)) не продвигается с помощью цикла For, это всегда столбец B. Вы имели в виду Range(Cells(l, 2), Cells(i, 2))? или что-то подобное?   -  person Shai Rado    schedule 16.12.2016
comment
Это так, извините Cells(i + 2, l).Value = WorksheetFunction.SumIf(Range(Cells(9, l), Cells(i, l)), ">0", Range(Cells(9, l), Cells(i, l)))   -  person Cezary    schedule 16.12.2016
comment
все еще не работает, просто для ясности   -  person Cezary    schedule 16.12.2016
comment
Вы пытаетесь суммировать только значения в диапазонах, если они > 0 (только положительные значения)?   -  person Shai Rado    schedule 16.12.2016
comment
попробуйте мой код ниже, посмотрите, работает ли он так, как вы предполагали   -  person Shai Rado    schedule 16.12.2016
comment
да, я хочу только положительные значения   -  person Cezary    schedule 16.12.2016


Ответы (2)


Если в вашем SumIf вы используете диапазон, который вы сравниваете с критериями (>0), также как диапазон для суммирования, нет необходимости добавлять его в SumIf в качестве третьего аргумента.

Вы можете использовать код ниже:

For l = 2 To j
    Cells(i + 2, l).Value = WorksheetFunction.SumIf(Range(Cells(9, l), Cells(i, l)), ">0")
Next l
person Shai Rado    schedule 16.12.2016
comment
@Cezary, это важно для меня, какие значения у вас есть для j и i? Я думаю, что вы не получаете значения, которые вы думаете, из вашей таблицы данных PivotTable - person Shai Rado; 16.12.2016

Используйте следующую функцию. Не нужно использовать "*" для сравнения

Cells(i + 2, l).Value = Aplication.WorksheetFunction.SumIf(Range(Cells(9, 2), Cells(i, 2)), "> 0", Range(Cells(9, 2), Cells(i, 2)))
person RAJA THEVAR    schedule 16.12.2016
comment
все еще не работает, даже ошибки не появляется, просто код не выполняется - person Cezary; 16.12.2016
comment
попробуйте использовать ›0 вместо ›0. - person RAJA THEVAR; 16.12.2016