У меня есть шесть рабочих листов, которые я хочу взять с уникального идентификатора из определенного столбца и объединить их в 1 мастер (чтобы сделать некоторый анализ и другое представление данных).Уникальная консолидация данных на нескольких рабочих листах
Данные все начинаются с одной и той же ячейки C17, но заканчиваются в разных строках (например, C180, C268 и т. Д.). Я хочу иметь возможность консолидировать уникальные идентификаторы из всех шести таблиц еженедельно.
Есть ли решение, которое не будет использовать формулы массива, поскольку это СЕРЬЕЗНО вызывает проблему из-за большого количества строк и ресурсов, необходимых для вычисления списка. Предпочтительна автоматизация VBA, где диапазоны ячеек для консолидации могут быть динамическими, а имена листов указаны со специфических ячеек на листе мастер-листа (он никогда не будет удален или изменен в пределах шести других)?
Итак, я бы выполнил макрос, который объединит все данные, основанные либо на именованных диапазонах, либо на определенных ячейках с именами листов & в них (используя косвенные для использования этих строк) и вставляя их в новый диапазон.
UDF также будет приемлемым, я просто не хочу, чтобы Excel «замораживал» выполнение вычислений.
BTW, я прочитал Getting unique values in Excel by using formulas only, но эти решения работают только в том случае, если данные находятся на одном листе или в очень специфических условиях. Также формулы массива не будут работать эффективно, так как мои данные имеют буквально тысячи строк.
Edit:
Вот тест макро я использовал, чтобы получить данные из одного листа, но проблема в том, что я не могу использовать динамику, ни добавить остальные имена из других листов, так как диапазон скопировать его я не могу вытащить первую пустую ячейку после копирования id.
Sub ConsolidateDATA()
'yStr = Evaluate("=ADDRESS(MIN(IF($C$10:$C$9999 = "", ROW($C$10:$C$9999))), 3, 1, 1)")
'Attempted dynamic range copy^- failed
yStr = "C10"
Range("Sheet1!$B$5:$B$29").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="", CopyToRange:=Range(yStr), Unique:=True
End Sub
У меня также были успешные попытки с формулами массива, но, к сожалению, они ресурсоемкие, что они ДЕЙСТВИТЕЛЬНО плохие решения.
- массив формула объединения списков в 1 мастер
=IFERROR(INDEX(INDIRECT($B$6, TRUE), ROWS(B$13:$B14)), IFERROR(INDEX(INDIRECT($B$7, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE))), IFERROR(INDEX(INDIRECT($B$8, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE)) - ROWS(INDIRECT($B$7))), IFERROR(INDEX(INDIRECT($B$9, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE)) - ROWS(INDIRECT($B$7)) - ROWS(INDIRECT($B$8))), IFERROR(INDEX(INDIRECT($B$10, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE)) - ROWS(INDIRECT($B$7)) - ROWS(INDIRECT($B$8)) - ROWS(INDIRECT($B$9, TRUE))), IFERROR(INDEX(INDIRECT($B$11, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE)) - ROWS(INDIRECT($B$7)) - ROWS(INDIRECT($B$8)) - ROWS(INDIRECT($B$9, TRUE)) - ROWS(INDIRECT($B$10, TRUE))),IFERROR(INDEX(INDIRECT($B$12, TRUE), ROWS(B$13:$B14) - ROWS(INDIRECT($B$6, TRUE)) - ROWS(INDIRECT($B$7)) - ROWS(INDIRECT($B$8)) - ROWS(INDIRECT($B$9, TRUE)) - ROWS(INDIRECT($B$10, TRUE)) - ROWS(INDIRECT($B$11, TRUE))),"")))))))
- массив формула, чтобы получить только уникальные данные
=INDEX(TotalNameListRangeFromFormulaAbove, MATCH(0, COUNTIF($D$16:D16, TotalNameListRangeFromFormulaAbove), 0))
Что вы пробовали до сих пор? Люди просят кода ** ** ожидается в показать оригинальное усилие – Jeeped
Хорошо, не проблема. Я не хотел забивать исходный пост, но я его отредактирую. – B1313
Я не уверен, почему это получилось, поскольку он не нарушает правил и не получил шанс ответить на любые запросы комментариев. – B1313