Страницы: 1
RSS
Редизайн таблицы с данными, Перестроить таблицу с данными под условия
 
Здравствуйте, прошу подсказать в ситуации, есть таблицы с исходными данными, но она сформирована в сплошном формате (где категории и их элементы отображены в одном столбце), прошу подсказать макрос, который может перенести название категорий в отдельный столбец и протянуть до названия следующей категории?(пример прикреплен), элементов внутри каждой категории 94, мб поможет (1 строка название категории, последующие 94 элементы ее, затем  96 строка - название категории И так далее)Спасибо большое!
 
gefy 444, Вам какое нужно решение: макрос, формулы, PQ?
Можете поступить просто:
в ячейку D2 и потянуть вниз;
Код
=ЕСЛИ(ЕТЕКСТ(A2);A2;D1)

в ячейку E2 и протянуть вниз;
Код
=ЕСЛИ(ЕТЕКСТ(A2);B2;E1)

Далее копируете эти два столбца и вставляете только значения. После чего устанавливаете фильтр и по отфильтровываете по столбцу прибыль пустые ячейки и удаляете их.
Отжимаете фильтр и ВУАЛЯ
PS это только если у Вас формат оригинала совпадает с примером
Изменено: Msi2102 - 29.06.2022 15:23:12
 
Формулами. Хотя, полагаю, эта задача больше для Power Query.
 
Можно так (параметр count поменяйте на 95 для реальных данных):
Код
let
  count = 4,
  data = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  clmnNames = List.Buffer ( { "Код", "Код категории", "Категория" } & List.RemoveItems ( Table.ColumnNames ( data ), { "Код" } ) ),
  split = Table.Split ( data, 4 ),
  transform = List.Transform (
    split,
    ( x ) =>
      [
        data = Table.Skip ( x ),
        addClmns = List.Accumulate (
          { { "Код", "Код категории" }, { "Наименование", "Категория" } },
          data,
          ( s, c ) => Table.AddColumn ( s, c{1}, each Record.Field ( x{0}, c{0} ) )
        ),
        reorder = Table.ReorderColumns ( addClmns, clmnNames )
      ][reorder]
  ),
  combine = Table.Combine ( transform )
in
  combine
 
surkenny, У меня почему то выдает ошибку  :( . Когда нажимаю на "Go to Error" отправляет к шагу transform. Думаю, файл прикладыватьнет смысла, ведь у вас все будет работать. Да, чуть не забыл уточнить - в данный момент работаю с Excel 2013.
Скрин
 
memo, вот эту строку попробуйте изменить:
Код
data = Table.Skip ( x, 1 ),

Или
Код
combine = Table.Combine ( transform, clmnNames )

Я не знаю, в какой из функций ранее был обязательным второй аргумент :)
Изменено: surkenny - 04.07.2022 12:00:09
 
surkenny, Заработало  :)
Дело было в Table.Skip ( x, 1 )
 
memo, а можешь прислать свой код, то он у меня выделяет весь красный в VBA?
 
Цитата
gefy 444 написал:
выделяет весь красный в VBA
Наверное потому, что это Power Query, а не VBA. И у меня лишь решение формулами в сообщении №3. Там же и прикрепленный файл.
 
memo, понял, спасибо, попробую такой вариант
Страницы: 1
Наверх