SumIf в VBA (условно для переменной)

Я пытаюсь написать два макроса VBA:

Первый берет переменную (VariableA) и проверяет значение другой переменной (VariableB). В зависимости от значения VariableB к VariableA применяется множитель. Затем берется конечное значение VariableA (с множителем) и выводится в новую переменную (VariableC). Я попробовал оператор "If Then Else", и он, похоже, не работает (скорее всего, потому, что я делаю это неправильно).

Второй макрос выполняет суммирование, которое возьмет VariableC и суммирует переменную в зависимости от значения VariableB и выдаст один результат для каждого вхождения VariableB.

Множитель

VariableA VariableB Multiplier VariableC 100 1998 1.4 140 100 1998 1.4 140 100 1999 1.7 170 100 1999 1.7 170 100 2000 2.0 200 100 2000 2.0 200

Я пытался использовать SumIfs в VBA, но я продолжаю получать ошибку 13, которая, я думаю, происходит из-за разницы в формате между VariableB и VariableA. Даже когда я устанавливаю две переменные в один и тот же формат (целое число), я все равно получаю сообщение об ошибке. Когда я отлаживаю его, он указывает мне на VariableB как на проблему.

В идеале я пытаюсь, чтобы мой окончательный результат выглядел примерно так:

VariableB SumofVariableC 1998 280 1999 340 2000 400

Я новичок в VBA и буду признателен за любую помощь, которую кто-либо может предложить. Спасибо.


person Ryan    schedule 25.02.2019    source источник
comment
Используйте сводную таблицу.   -  person Scott Craner    schedule 25.02.2019
comment
Спасибо за совет. Я думаю, что сводная таблица может предоставить мне часть решения, которое мне нужно.   -  person Ryan    schedule 26.02.2019


Ответы (3)


Что касается переменного множителя, попробуйте использовать Select Case

Dim Vari as Integer
Dim Multi as Single
Vari = VariableB 

Select Case Vari
    Case Is = 1998
        Multi = 1.4
    Case Is = 1999
        Multi = 1.7
    Case Is = 2000
        Multi = 2.0
    Case Else
        Multi = 1.5
End Select

Что касается второй проблемы, я не уверен, что понимаю, что происходит, но кажется, что переменные не совпадают. Возможно, вам придется конвертировать/приводить их. Тип данных Integer отличается от типа данных Single (для десятичных знаков). Используйте преобразовать в целое число Cint, чтобы преобразовать продукт в целое число, прежде чем дойдете до места ошибки.

person Greg_D    schedule 25.02.2019

Сводная таблица может работать над вашей проблемой и может дать вам точный результат с простой навигацией по ее необработанным данным и столбцам.

person Community    schedule 25.02.2019
comment
Спасибо за совет. Я думаю, что сводная таблица может предоставить мне часть решения, которое мне нужно. - person Ryan; 26.02.2019
comment
добро пожаловать :), если это решение поможет вам, не забудьте проголосовать за него и отметить это как ответ) - person ; 26.02.2019

СУММПРОИЗВ (СУММЕСЛИ, ИНДЕКС/ПОИСКПОЗ)

Решение Excel

  • Допустим, верхняя часть — это исходные и целевые данные. В нижней части отображаются только формулы, используемые во 2-й строке соответствующих столбцов.
  • Изображение можно использовать для лучшего объяснения того, какие данные являются исходными (исходными), а какие целевыми (результирующими), например. В столбцах A и B есть данные. У меня есть (хочу создать) уникальный список данных столбца B в столбце F (или на другом листе в столбце A или в строке, разделенной запятыми) и соответствующий множитель в столбце G Мне нужно вычислить данные... и скопировать их в столбец I. Столбцы C и D не нужны... и т.д.

  • Загрузка рабочей книги (Дропбокс)

Изображение

введите здесь описание изображения

Формулы

=INDEX(G$2:G$4,MATCH(B2,F$2:F$4,0))
=A2*INDEX(G$2:G$4,MATCH(B2,F$2:F$4,0))
=SUMIF(B$2:B$7,F2,D$2:D$7)
=SUMPRODUCT((B$2:B$7=F2)*A$2:A$7*G2)
person VBasic2008    schedule 25.02.2019