Приветствую форумчане. Появилась идея создать в ексель своего рода фильтр и подсчет объемов продукции. Причем продукция может поворятся и может находится в разных ячейках (в данном листе). Подскажите пожалуйста куда нужно копать? Есть возможность реализовать данную процедуру с помощью формул в екселе или уже стоит переходить в VBA??
Приветствую форумчане. Появилась идея создать в ексель своего рода фильтр и подсчет объемов продукции. Причем продукция может поворятся и может находится в разных ячейках (в данном листе). Подскажите пожалуйста куда нужно копать? Есть возможность реализовать данную процедуру с помощью формул в екселе или уже стоит переходить в VBA??novichok0417
Serge_007, Спасибо за формулу подсчета количества значений, а есть формула фильтрации значений (Продукт "А", Продукт "Б", Продукт "В")??. Значений в таблице бывает много доходит больше 500(пятиста) каждый раз лезть в фильтр не хотелось бы. В просторах интернета читал что пользуются формулой ИНДЕКС, но так и не разобрался в ней что да как.
Serge_007, Спасибо за формулу подсчета количества значений, а есть формула фильтрации значений (Продукт "А", Продукт "Б", Продукт "В")??. Значений в таблице бывает много доходит больше 500(пятиста) каждый раз лезть в фильтр не хотелось бы. В просторах интернета читал что пользуются формулой ИНДЕКС, но так и не разобрался в ней что да как.novichok0417
Поэтому - предлагаю макросом (см. вложение): [vba]
Код
Sub novichok0417() Dim rR As Range Dim LisT As Long For Each rR In Range("b2:e4") LisT = Cells(Rows.Count, "b").End(xlUp).Row + 1 If rR.Application.WorksheetFunction.CountIf(Range("b7:e" & LisT), rR) = 0 Then Range("b" & LisT) = rR Range("c" & LisT) = rR.Application.WorksheetFunction.CountIf(Range("b2:e4"), rR) End If Next rR End Sub
Поэтому - предлагаю макросом (см. вложение): [vba]
Код
Sub novichok0417() Dim rR As Range Dim LisT As Long For Each rR In Range("b2:e4") LisT = Cells(Rows.Count, "b").End(xlUp).Row + 1 If rR.Application.WorksheetFunction.CountIf(Range("b7:e" & LisT), rR) = 0 Then Range("b" & LisT) = rR Range("c" & LisT) = rR.Application.WorksheetFunction.CountIf(Range("b2:e4"), rR) End If Next rR End Sub
Serge_007, Можно еще такой вопрос? Можно ли вывести подсчет на второй лист?? Потому что количество продукции каждый месяц предоставляется в разном количестве(может быть от нескольких десятков, до сотен). По предыдущему макросу в принципе все понятно, можно ли ввести диапазон обработки исходных данных весь лист(а не конкретный диапазон)?
Serge_007, Можно еще такой вопрос? Можно ли вывести подсчет на второй лист?? Потому что количество продукции каждый месяц предоставляется в разном количестве(может быть от нескольких десятков, до сотен). По предыдущему макросу в принципе все понятно, можно ли ввести диапазон обработки исходных данных весь лист(а не конкретный диапазон)?novichok0417
можно ли ввести диапазон обработки исходных данных весь лист(а не конкретный диапазон)?
Весь лист - это тоже конкретный диапазон
Немного изменил макрос Теперь диапазон обработки автоматически изменяется от количества заполненных строк и столбцов на листе "Исходные данные":[vba]
Код
Sub novichok0417_2() Dim rR As Range Dim LisT&, H&, V& V = Sheets("Исходные данные").Cells(Rows.Count, "a").End(xlUp).Row H = Sheets("Исходные данные").Cells(1, Columns.Count).End(xlToLeft).Column For Each rR In Sheets("Исходные данные").Range(Cells(1, 1), Cells(V, H)) LisT = Sheets("Расчет").Cells(Rows.Count, "a").End(xlUp).Row + 1 If rR.Application.WorksheetFunction.CountIf(Sheets("Расчет").Range("a2:a" & LisT), rR) = 0 Then Sheets("Расчет").Range("a" & LisT) = rR Sheets("Расчет").Range("b" & LisT) = Application.WorksheetFunction.CountIf(Sheets("Исходные данные").Range(Cells(1, 1), Cells(V, H)), rR) End If Next rR Sheets("Расчет").Activate Cells(1, 3) = "Всего: " & WorksheetFunction.Sum(Range(Cells(2, 2), Cells(LisT, 2))) End Sub
можно ли ввести диапазон обработки исходных данных весь лист(а не конкретный диапазон)?
Весь лист - это тоже конкретный диапазон
Немного изменил макрос Теперь диапазон обработки автоматически изменяется от количества заполненных строк и столбцов на листе "Исходные данные":[vba]
Код
Sub novichok0417_2() Dim rR As Range Dim LisT&, H&, V& V = Sheets("Исходные данные").Cells(Rows.Count, "a").End(xlUp).Row H = Sheets("Исходные данные").Cells(1, Columns.Count).End(xlToLeft).Column For Each rR In Sheets("Исходные данные").Range(Cells(1, 1), Cells(V, H)) LisT = Sheets("Расчет").Cells(Rows.Count, "a").End(xlUp).Row + 1 If rR.Application.WorksheetFunction.CountIf(Sheets("Расчет").Range("a2:a" & LisT), rR) = 0 Then Sheets("Расчет").Range("a" & LisT) = rR Sheets("Расчет").Range("b" & LisT) = Application.WorksheetFunction.CountIf(Sheets("Исходные данные").Range(Cells(1, 1), Cells(V, H)), rR) End If Next rR Sheets("Расчет").Activate Cells(1, 3) = "Всего: " & WorksheetFunction.Sum(Range(Cells(2, 2), Cells(LisT, 2))) End Sub
Serge_007, если удалить значения с B1 по U1 то расчет ведется только по столбцу А(аналогично если удалить знакчения в диапазоне C1 по U1, то расчет ведется только по столбцам А и В). Получается что диапазон обработки автоматически изменяется от количества заполненных столбцов в первой строке на листе "Исходные данные".
Serge_007, если удалить значения с B1 по U1 то расчет ведется только по столбцу А(аналогично если удалить знакчения в диапазоне C1 по U1, то расчет ведется только по столбцам А и В). Получается что диапазон обработки автоматически изменяется от количества заполненных столбцов в первой строке на листе "Исходные данные".novichok0417
Serge_007, извините, некорректно задал вопрос есть ситуации, когда какая-нибудь из ячеек будет пустой, в итоге макрос не будет выполнять подсчет значений в пустых ячейках(а следовательно и в столбцах) см.приложенный файл. (в строке введены значения A1 и E1, в итоге макрос считает все значения в столбцах с A по E, значения введеные в ячейках B2:U32 макрос игнорирует). В принципе можно в первом и последнем столбце в 1ой строке (в данном примере поставить любую цифру) чтобы макрос считал все столбцы листа "Исходные данные", но данное решение приводит к увеличению времени подсчета(и даже зависанию ексель).
Serge_007, извините, некорректно задал вопрос есть ситуации, когда какая-нибудь из ячеек будет пустой, в итоге макрос не будет выполнять подсчет значений в пустых ячейках(а следовательно и в столбцах) см.приложенный файл. (в строке введены значения A1 и E1, в итоге макрос считает все значения в столбцах с A по E, значения введеные в ячейках B2:U32 макрос игнорирует). В принципе можно в первом и последнем столбце в 1ой строке (в данном примере поставить любую цифру) чтобы макрос считал все столбцы листа "Исходные данные", но данное решение приводит к увеличению времени подсчета(и даже зависанию ексель).novichok0417