Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Сведение значений нескольких ячеек в одну, на основе заданных условий, заменить множество однотипных макросов одним
 
Все еще мучаюсь с решением данной задачи. Если у кого-то есть смысли, как решить проблему - прошу подсказать.
Пробовал объединять эти однотипные макросы в один, через "если" (If) и, в зависимости от результата "если", менять данные макросах. Результат нулевой, только еще больше запутался.
Технически макрос работает идеально, но проблема заключается именно в том, что каждая строка - отдельный макрос. Соответственно 100 строк - 100 макросов (с ручной корректировкой данных в 3х местах каждого макроса). Если бы можно было сделать отсчет от определенной ячейки для всех этих 100 строк, было бы отлично.
Изменено: Andrey - 25.05.2021 18:30:49
Сведение значений нескольких ячеек в одну, на основе заданных условий, заменить множество однотипных макросов одним
 
Цитата
_Igor_61 написал:
Это и будет в одном макросе. Если не получается задать условия или наладить работу макроса - создайте тему с соответствующим названием и понятным примером
Возможно я вас не совсем правильно понял, но
я приложил файл, в нем макрос и так проверяет условия через "IF условие из столбца3 and условие and условие "
проблема заключается в том, что я не могу понять, как задать в одном макросе изменение столбцов с данными исходя из условия3.
Выше описал пример того, что должно получится, надеюсь, что более понятно, чем в первом посте
Изменено: Andrey - 23.05.2021 15:15:37
Сведение значений нескольких ячеек в одну, на основе заданных условий, заменить множество однотипных макросов одним
 
Прикрепил обновленные файлы.

Файл "К1", ячейка E21, результат "1-3".
1) Условие1 из ячейки А21 = 1005 (в файле "К2" осуществляется поиск этого значения по столбцу О)
2) Условие2 из ячейки С21 = 1 (в файле "К2" осуществляется поиск этого значения по столбцу В)
3 Условие3 из ячейки D21 = 1 (значит в файле "К2" осуществляется поиск даты E20 (01.06.2021) из столбца C)
все строки файла "К2" проверены, под все условия попало 3 строки, у которых по столбцу А значения равны 1, 2 и 3. Т.к. значения последовательны, выводится результат "1-3".
Этому соответствует код:

       со строкой    If arr2(1, i) = arr(n, 3) And arr(n, 15) = m And arr3(n, 2) = mm Then
Код
Sub Ìàêðîñ1()
    Dim arr, arr2, arr3, arr4, i As Long, n As Long, lr As Long, lcol As Long, tt As String, col As New Collection, fl As Boolean, m As Range, mm As Range, mmm As Range
    Set m = [A21]
    Set mm = m.Offset(0, 2)
    Set mmm = mm.Offset(0, 2)
    Set wb = ThisWorkbook: Set wb2 = Workbooks("Ê2.xlsx")
    lr = wb2.Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row
    lcol = Cells(20, Columns.Count).End(xlToLeft).Column
    arr = wb2.Sheets(2).Range("A2:O" & lr)
    arr2 = wb.Sheets(1).Range(Cells(20, 5), Cells(20, lcol))
    arr3 = wb2.Sheets(2).Range("A2:O" & lr)
    ReDim arr4(1 To 1, 1 To UBound(arr2, 2) - LBound(arr2) + 1): K = 1
    For i = LBound(arr2) To UBound(arr2, 2) - LBound(arr2) + 1
        tt = ""
        Set col = Nothing
        For n = LBound(arr) To UBound(arr)
            If arr2(1, i) = arr(n, 3) And arr(n, 15) = m And arr3(n, 2) = mm Then
                On Error Resume Next
                col.Add arr(n, 1), CStr(arr(n, 1))
            End If
        Next n
        For n = 1 To col.Count
            tt = tt & ", " & col(n)
            Do While col(n) = col(n + 1) - 1 And n < col.Count
                fl = True: n = n + 1
                If n >= col.Count Then Exit Do
            Loop
            If fl Then tt = tt & "-" & col(n): fl = False
        Next n
        arr4(1, K) = Mid(tt, 3): K = K + 1
    Next i
    mmm.Resize(1, UBound(arr4, 2) - LBound(arr4) + 1).NumberFormat = "@"
    mmm.Resize(1, UBound(arr4, 2) - LBound(arr4) + 1) = arr4
End Sub


Файл "К1", ячейка E25, результат "пусто" (нет данных)

Файл "К1", ячейка F25, результат 1-5, 8"
1) Условие1 из ячейки А21 = 1005 (в файле "К2" осуществляется поиск этого значения по столбцу О)
2) Условие2 из ячейки С25 = 1 (в файле "К2" осуществляется поиск этого значения по столбцу В)
3 Условие3 из ячейки D21 = 5 (значит в файле "К2" осуществляется поиск даты F20 (02.06.2021) из столбца E)
все строки файла "К2" проверены, под все условия попало 6 строк, у которых по столбцу А значения равны 1, 2, 3, 4, 5 и 8. Т.к. значения 1, 2, 3, 4, 5 последовательны, а 8 нет, выводится результат "1-5, 8"

Этому соответствует код:

Скрытый текст
Сведение значений нескольких ячеек в одну, на основе заданных условий, заменить множество однотипных макросов одним
 
Доброго времени!

Задача следует из названия темы, необходимо заменить множество однотипных макросов (~10 штук) одним.
Макросы отличаются тем, что каждый прописан под свою конкретную строку, т.е. "Макрос1" для строки 21, "Макрос2" для строки 22 и т.д.
В зависимости от макроса (т.е. строки) выбираются разные столбцы с данными в файле "К2" и начальная ячейка для записи результата. К примеру, строке 21 соответствует столбец C и первой ячейкой с результатом будет E21, строке 22 - столбец D и первая ячейка с результатом E22 и т.п.

Отличия в коде:
Код
Макрос1
Set mm = m.Offset(0, 2)
If arr2(1, i) = arr(n, 3) And arr(n, 15) = m And arr3(n, 2) = mm Then

Макрос2
Set mm = m.Offset(1, 2)
If arr2(1, i) = arr(n, 4) And arr(n, 15) = m And arr3(n, 2) = mm Then

Что конкретно хочется получить:
Один макрос, который будет проверять данные из столбца "Условие 3" и исходя из них выполнять определенные действия. Т.е. в ячейке D21 у нас цифра 1, значит берем столбец с данными C и пишем результат начиная с ячейки E21, в ячейке D22 цифра 2, значит берем столбец D и результат с ячейки D22
Значения типа "1= столбец D", "2 = С", "3 = ...." будут прописываться в коде заранее руками, нужно понимать как это сделать.

Необходимо из файла "К2" в файл "К1" вывести диапазоном все значения ячеек, попадающих под определенные условия обозначенные в файле "К1".
Три условия - цифры, четвертое условие дата. "Условие 3" меняется в зависимости от строки (удаленности от Условия 1) и, соответственно, меняет условие поиска (столбец) в файле "К2".

Основной файл с макросами "К1" и файл с данными "К2" прикрепил. Если нужно описание работы самого макроса или какая-то другая важная информация - прошу написать.
Суммирование данных с множества листов на один лист, по определенным условиям
 
Все еще нуждаюсь в помощи опытных VBA юзеров.
Суммирование данных с множества листов на один лист, по определенным условиям
 
Прикрепил упрощенный файл с формулами. От оригинала отличается только тем, что в оригинальной таблице, на всех листах, значений "НОМЕР" и "ДАТА" очень много и самих листов не 5, а 50+

Формула Лист1 ячейка Е2
Код
=(D2)+
СУММЕСЛИМН(Лист2!$F:$F;Лист2!$G:$G;Лист1!E$1;Лист2!$A:$A;Лист1!$A2)-
(
СУММЕСЛИ(Лист3!$A:$A;Лист1!$A2;Лист3!E:E)+
СУММЕСЛИ(Лист4!$A:$A;Лист1!$A2;Лист4!E:E)+
СУММЕСЛИ(Лист5!$A:$A;Лист1!$A2;Лист5!E:E))
Как работает:
На Листе1, в ячейке E2:
1) берется соседняя, левая ячейка, к ней прибавляется
2) сумма всех ячеек Листа2, столбца F, попадающих под условие, что "ДАТА" (Лист2 столбец G) и "НОМЕР" (Лист2 столбец А) соответствуют проверочным ячейкам (Лист 1, ячейка Е1 и А2)
3) вычитается сумма всех ячеек Листа 3, столбца D, попадающих под условие, что номер (Лист3 столбец А) соответствует проверочной ячейке (Лист1, ячейка А2)
4) пункт 3 повторяется по всем остальным листам (Лист4, Лист5, Лист6...), желательно должен быть выбор листа по названию или по коду (Worksheets(4, 5, 6...))

Собственно нужно: вывести в соответствующие ячейки результат формулы (т.е. вывести не формулу, а именно ответ значениями)
Ответ должен быть получен на Листе1, в тех ячейках у которых есть дата (по столбцу) и номер (по строке), за исключением столбца с первой датой. В примере первый столбец с "ДАТОЙ" (01.01.2021) - столбец D, но по факту дата и столбец может меняться, но он всегда будет самым левым из диапазона с датами).
Изменено: Andrey - 18.05.2021 06:35:39
Суммирование данных с множества листов на один лист, по определенным условиям
 
Не уверен, что правильно понимаю, что значит "таблица суммирования". Мне нужен макрос который сам посчитает формулу (которую я вставлю) и выведет только результат.

В мое примере, выше, формула упрощенная для понимания.
Фактически она имеет вид (написал ниже), последняя строка повторяется много раз (проверяет и суммирует данные с множества листов)
Код
=(соседняя ячейка слева)+
СУММЕСЛИМН('Лист2'!$H:$H;'Лист2'!$C:$C;проверочная ячейка;'Лист2'!$I:$I;проверочная ячейка)-
(СУММЕСЛИ('Лист3'!$A:$A;проверочная ячейка;'Лист3'!FH:FH)+
Суммирование данных с множества листов на один лист, по определенным условиям
 
Здравствуйте, форумчане!

Привожу упрощенный пример моей таблицы:
  • имеется диапазон ячеек с формулами (BB2:BO10)
  • формулы в этих ячейках однотипные, отличаются только ссылками на ячейки (т.е. если формула в BB2 в ней формула =BB1+A2, а если BO5 = BO1+A5)
Необходим макрос, который сам просчитает эти формулы (без записи формул в ячейки) и выведет только результат расчетов.

Из того, что у меня получилось на данный момент:
создать макрос через запись формулы из BB2 и "растянуть" формулы до BO20
Код
Sub Макрос1()
    Range("BB2:BO20").Select
    Range("BB2:BO20").FormulaR1C1 = "=R1C+RC1"
        Range("BB2:BO20").Value = Range("BB2:BO20").Value
End Sub
Вывести в ячейку значения других ячеек, попадающих под определенные условия
 
Цитата
Mershik написал:
как-то так...
К сожалению, не работает вот эта строчка:
Код
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add2 Key:=Range("A3:A" & lr) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Пишет, что ошибка 438. Нашел на форуме описание решения - не помогло, попробовал на другом ПК - не помогло.
Если строку удалить, то макрос работает (возможно не так, как должен).

Можно как-то дополнительно сделать так, что бы значения считались диапазоном, если допустимо исходя из номеров?
Т.е. последовательность из 1, 2, 3, 12, выглядела бы так 1-3, 12. Сейчас она выглядит так: 1-2-3, 12 (ячейка E3)
Если последовательность была бы 1, 12, 2, 3, 4 - то выводилось бы 1, 12, 2-4 (ну и т.д., надеюсь, что понятно описал)
 
Вывести в ячейку значения других ячеек, попадающих под определенные условия
 
Цитата
Юрий М написал:
Сформулируйте ЗАДАЧУ. Предлагайте - заменят модераторы.
Цитата
Mershik написал:
просто коротко что нужно сделать?
Спасибо. Если возможно переименовать данную тему и не создавать дубликат - предлагаю новое название: "Вывести в ячейку значения других ячеек, попадающих под определенные условия"

Суть проблемы:
Есть 3 столбца с данными (А В С) и 2 проверочные ячейки D1 E1.
Необходимо получить в ячейке F1 все значения из столбца А, при условии, что:
1) в столбце В значения будут равны D1
2) в столбце С значения будут равны E1
Т.е. не суммировать все нужные ячейки столбца А, а именно выводить значения, диапазоном или через запятую.
Изменено: Andrey - 13.05.2021 22:08:41
Вывести в ячейку значения других ячеек, попадающих под определенные условия
 
Цитата
vikttur написал:
создали тему с названием. отражающим конкретную задачу
Как правильно и емко назвать тему для пункта 2? У меня есть понятно описание, что необходимо получить, но с помощью чего этого можно добиться я не знаю.
Вывести в ячейку значения других ячеек, попадающих под определенные условия
 
Доброго времени суток!
Необходимо модернизировать формулу двумя пунктами:
1) Добавить проверку по значению в ячейке. Т.е. формула должна обрабатывать только те строки, в которых значение в столбце "С" равно значению ячейки D3. (4 равно 4 - формула работает, если 4 не равно 4, формула ставит 0).
2) Формула должна учитывать разницу в значениях указанных в столбце "А". В ячейке Е3 указана формула, она выводит значение "1-4" (А3 - А6), т.е. первую и последнюю ячейку на основании даты 20.01.2021 (Е1 В3-В6). Проблема в том, что она не учитывает/не выводит значение ячейки А5 - "12".
Прикрепил эксель файл и картинку. Использую формулы, т.к. с макросами, к сожалению, не дружу.
Группировка данных из нескольких листов в одну ячейку (с условием)
 
Цитата
Мария Hrutckaia написал:
см. описание функции
Спасибо за замечание, тоже заметил ошибки в работе формулы без "0".
Цитата
Мария Hrutckaia написал:
поэтому и надо заворачивать в ЕСЛИОШИБКА()
Само выражение завернул в "ЕСЛИОШИБКА", а как правильно завернуть &", "&  дабы лишние запятые не показывались? Получается не очень красиво, когда много листов и много формул с ошибкой (в ячейке отображается примерно так: ",,группа3,,,,,,группа1,,,"
Группировка данных из нескольких листов в одну ячейку (с условием)
 
Цитата
Mershik написал: лучше вести на одном листе все сразу и делать сводную в нужном вам виде
Проблема в том, что свести все на один лист не получится. На каждый лист заносятся унифицированные (по столбцам) данные, но сами по себе разные + промежуточные расчетные формулы.

Цитата
Mershik написал: и формулой в ЛОБ
Спасибо, работает! Макрос не осилил, т.ч. буду использовать формулу. Благо листов не так много, да и нужно настроить только 1 раз.

Цитата
Мария Hrutckaia написал:Наверно можно и формулой:
Спасибо, тоже работает!
Только у меня получилось, что интервальный просмотр (0) не нужно указывать. Если указать, пишет "Н/Д". Вот так работает прекрасно:
Цитата
=ВПР(A2;Лист2!A:B;2)&", "&ВПР(Лист1!A2;Лист3!A:B;2)
Группировка данных из нескольких листов в одну ячейку (с условием)
 
К сожалению, в макросах понимаю мало, есть возможность подсказать в каком направлении двигаться и, что конкретно "копать"? Возможно, у моей задачи есть есть какое-то более правильное название?
Группировка данных из нескольких листов в одну ячейку (с условием)
 
Доброго времени суток!
Имеются листы и данные на них:
Лист1 - А1-А10 (порядковые номера), В1 (значение группы для порядкового номера А1-А10)
Лист2 - А1-А10 (порядковые номера), В1 (порядковый номер для всех номеров на данном листе)
Лист3 - А1-А10 (порядковые номера), В1 (порядковый номер для всех номеров на данном листе)

Задача:
Получить на Листе1, в ячейке В1, значение "Группа1, Группа2". Т.е. нужна формула, которая будет проверять наличие порядкового (Лист1 А1) на других листах (Лист2-Лист3 А1-А10) и, при положительном поиске, указывать номер конкретной группы, в зависимости от листа, в ячейку Лист1 В1.
Для понимания приложил эксель файл с данными и результатом (без формулы).

З.Ы. пробовал решить задачу через ВПР, но несколько ВПР в одной ячейке применить нельзя.
Страницы: 1
Наверх