SumIf с использованием динамического столбца - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать шаблон, который будет извлекать данные из нескольких файлов, которые я буду сохранять в своих документах.Шаблон будет извлекать данные и использовать функцию SumIf для ссылки на закуску на листе 1 и суммировать числа рядом с ней на листах 2 и 3. Я предполагаю, что закуска всегда будет в столбце А, но в зависимости отфайл, который я загружаю, столбец «Количество» может отличаться.

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

Ошибка '1004': ошибка приложения или объекта -или- Ошибка '13': несоответствие типов

Я думал оrange.address, но я не уверен, как это сделать.Это необходимо?Любое понимание будет очень признателен.

Закуски:
Snacks

Dim Lr, Lc As Long

Lr = Cells(Rows.Count, "A").End(xlUp).Row
Lc = Cells(1, Columns.Count).End(xlToLeft).Column
For a = 1 To Lr

    Cells(a, 3).Value = Application.WorksheetFunction.SumIf(Worksheets("Sheet 2").Range( _
            "A2:A" & Lc), Worksheets("Sheet 1").Cells(a, 1), Worksheets("Sheet 2").Range( _
            "A2:A" & Lc))

Next a

-------------------------------- Обновление --------------------------

Спасибо за ценную информацию, ребята.

@ QHarr Я действительно ценю понимание.У меня вопрос, как мне создать «один критерий», когда я хочу, чтобы критерии менялись каждый раз, когда он повторяется?По сути, я хочу, чтобы он сначала суммировал «Cheetos», но в следующий раз я хотел бы, чтобы он суммировал «Doritos».Вы увидите выше, что я поменялся местами (a, 1) вместо Range ("A: A") для критериев.Я получаю значение 0, потому что я не думаю, что ячейки (a, 1) зацикливаются так же, как зацикливающийся цикл.

@ Michal Rosa Спасибо, я больше не получаю ошибку - она ​​работает без ошибок, но все значения SumIf возвращаются как «0».Кроме того, отличная уловка в проблеме LastRow - после некоторой проработки этой проблемы меня поймали мелочи.

1 Ответ

0 голосов
/ 26 ноября 2018

Это не очень эффективный способ ведения дел, но если вы действительно хотите выполнять свои вычисления таким образом, ваш код должен выглядеть следующим образом:

Dim l As Long

l = Cells(Rows.Count, "A").End(xlUp).Row

For a = 2 To l

    Cells(a, 3).Value = Application.WorksheetFunction. _
                    SumIf(Worksheets("Sheet 1").Range("A2:A" & l), _
                    Cells(a, 1).Value, _
                    Worksheets("Sheet 1").Range("C2:C" & l)) + _
                        Application.WorksheetFunction. _
                    SumIf(Worksheets("Sheet 2").Range("A2:A" & l), _
                    Cells(a, 1).Value, _
                    Worksheets("Sheet 2").Range("C2:C" & l))

Next a

Предполагая, что ваши вводимые данные находятся в листах "Лист1 "и" Лист 2 "в колонках А и С.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...