Страницы: 1
RSS
Получение значений столбцов с нескольких листов
 
Ребятки, добрый день.
Помогите, пожалуйста автоматизировать 2 задачи, которые сейчас делаю ручками. Чувствую, это можно сделать, но пока не нашел ответа как :(
Первая задача
Есть несколько листов в одной книге. Мне нужно на новый лист со всех остальных листов получить значения с первой строки всех столбцов, где эти значения заполнены(пересечения столбца и строки не пустое). То есть иными словами мне надо получить все значения первой строки заполненных столбцов в массиве листов.
Я могу подсчитать и получить номера столбцов с помощью функции, а потом подставить этот массив в функцию Индекс для получения значений первой строки этих столбцов, но проблема в том, что на каждом листе разное количество столбцов...И поэтому в функции получения массива номеров столбцов диапазон каждого листа нужно менять вручную :cry: Можно как-то получить массив номеров заполненных столбцов листа ?
Здесь же вопрос-первым аргументом функции ИНДЕКС идет массив откуда брать данные. Какой будет синтаксис, чтобы в качестве этого аргумента указать массив листов? Чтобы не для каждого листа отдельно форматировать формулу, а получить данные одной формулой?
Если немного намудрил с описанием, напишу на человеческом для чего мне это нужно - есть N количество листов, на каждом листе есть заголовки(характеристики агрегатов). Количество заголовков-характеристик на каждом листе разное. Большинство статусов по листам совпадают, но есть и те, которые индивидуальны для каждого листа. Мне нужно на одном листе собрать все возможные заголовки-статусы и сделать список неповторяющихся, чтобы в будущем делать сводный лист по всем листам. Отсюда вытекает...
Вторая задача
Есть сводный лист со всеми возможными характеристиками агрегатов. Мне нужно по названию заголовка-характеристики получить все данные из столбцов других листов... Получается только в ручном режиме через сочитание функций ПОИСКПОПОЗ и ИНДЕКС, меняя аргументы для каждого листа. Но это очень много времени забирает, может умные люди подскажут как это правильнее сделать...? :oops:  
Изменено: Богдан - 29.06.2022 16:16:01
 
Богдан, на форуме главное правило - приложи небольшой пример в файле Excel и покажи в нём готовый результат. Нет файла - будет долгий разговор ни о чём и впустую потерянное время
 
Загрузил :oops:  
 
Богдан, ну, с первой задачей - собрать все заголовки со всех листов я могу помочь.
Скачайте файл, откройте его, нажмите Alt+F8 - Выполнить - макрос соберёт все уникальные заголовки со всех листов и вставит их на новый лист.
P.S. А по второй задаче - созданию сводной - если никто вам не поможет бесплатно... могу написать макрос за деньги, который соберёт вашу сводную
Изменено: New - 29.06.2022 21:36:59
 
Цитата
написал:
Богдан, ну, с первой задачей - собрать все заголовки со всех листов я могу помочь.
Скачайте файл, откройте его, нажмите Alt+F8 - Выполнить - макрос соберёт все уникальные заголовки со всех листов и вставит их на новый лист.
P.S. А по второй задаче - созданию сводной - если никто вам не поможет бесплатно... могу написать макрос за деньги, который соберёт вашу сводную
Большое спасибо Вам за макрос! Понимаете в чем дело, я все же надеялся, что это решается без написания макрос на VBA, почему-то казалось, что вторую задачу можно решить функциями. Как мне казалось, там всего-то и надо что перебирать столбцы по имени и возвращать все содержимое столбца, если заголовок найден. И так по каждому листу. Видимо без "продвинутого" уровня владением макросами, которые я только начал познавать, не обойдется...
В любом случае спасибо за помощь!
 
Если у Вас офис 2019 и выше то можете собрать уникальные такой формулой:
Код
=УНИК(ФИЛЬТР.XML("<t><s>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ(";";1;'7180301:6180310'!1:1);";";"</s><s>")&"</s></t>";"//s"))

Но я бы на Вашем месте смотрел в сторону Power Query. Например можно почитать ТУТ, ещё может пригодится ЭТО и ЭТО и выглядит примерно как в файле
Код
let
    f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
    Запрос = Table.Combine({f("Таблица1"), f("Таблица2"), f("Таблица3"), f("Таблица4"), f("Таблица5"), f("Таблица6"), f("Таблица7"), f("Таблица8")})
in
    Запрос

PS И ещё, в ПРАВИЛАХ форума (п.2.6), сказано: 1 вопрос 1 тема.
Изменено: Msi2102 - 30.06.2022 09:46:47
 
Цитата
написал:
Если у Вас офис 2019 и выше то можете собрать уникальные такой формулой:
Код
    [URL=#]?[/URL]       1      =УНИК(ФИЛЬТР.XML(  "<t><s>"  &ПОДСТАВИТЬ(ОБЪЕДИНИТЬ(  ";"  ;1;  '7180301:6180310'!1:1);";";"</s><s>")&"</s></t>";"//s"))   
 
Но я бы на Вашем месте смотрел в сторону Power Query. Например можно почитать  ТУТ , ещё может пригодится  ЭТО  и  ЭТО  и выглядит примерно как в файле
Код
    [URL=#]?[/URL]       1  2  3  4  5      let          f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],          Запрос = Table.Combine({f(  "Таблица1"  ), f(  "Таблица2"  ), f(  "Таблица3"  ), f(  "Таблица4"  ), f(  "Таблица5"  ), f(  "Таблица6"  ), f(  "Таблица7"  ), f(  "Таблица8"  )})    in          Запрос   
 
PS И ещё, в  ПРАВИЛАХ  форума (п.2.6), сказано: 1 вопрос 1 тема.
Извиняюсь за 2 вопроса. Просто они взаимосвязаны, поэтому решил не разделять для лучшего понимания.
Спасибо большое за помощь, буду изучать инструменты, которыми не владею))
Страницы: 1
Наверх