Доброго времени суток, уважаемые форумчане. Есть задание на преобразование данных. Второй день бьюсь, не могу никак придумать, как реализовать. Подскажите, пожалуйста, каким образом это можно сделать? Любые идеи приветствуются. В приложенном файле входные и выходные данные. Нужно как-то ускорить ручную работу, потому что таких таблиц очень много и они гораздо больше приведенной.
Доброго времени суток, уважаемые форумчане. Есть задание на преобразование данных. Второй день бьюсь, не могу никак придумать, как реализовать. Подскажите, пожалуйста, каким образом это можно сделать? Любые идеи приветствуются. В приложенном файле входные и выходные данные. Нужно как-то ускорить ручную работу, потому что таких таблиц очень много и они гораздо больше приведенной.antonio2040
Для начала я хотел бы узнать, сколько в одном размере максимум может быть рОстов? Например в 88 их 2: 164 и 170. А есть такие, что их будет 5 или десять штук? Потому как я бы для начала эти объединенные ячейки разбил бы на одиночные, чтобы и в столбце 164 был бы 88 размер и в 170, тоже самое. Тогда уже было бы проще собрать необходимые данные.
Для начала я хотел бы узнать, сколько в одном размере максимум может быть рОстов? Например в 88 их 2: 164 и 170. А есть такие, что их будет 5 или десять штук? Потому как я бы для начала эти объединенные ячейки разбил бы на одиночные, чтобы и в столбце 164 был бы 88 размер и в 170, тоже самое. Тогда уже было бы проще собрать необходимые данные.Wowick
Больше двух не бывает. Самый маленький размер (80) идет в ростах 158 и 164, остальные 164 и 170. Таким образом, может быть либо 1, либо 2 роста, приходящиеся на один размер.
Больше двух не бывает. Самый маленький размер (80) идет в ростах 158 и 164, остальные 164 и 170. Таким образом, может быть либо 1, либо 2 роста, приходящиеся на один размер.antonio2040
Sub tt() Dim cc As Range, r As Range, rr As Range, t For Each cc In Selection.CurrentRegion If cc.MergeCells Then t = cc.Value: Set r = cc.MergeArea: cc.UnMerge For Each rr In r: r = t: Next End If Next End Sub
[/vba] А затем цикл по столбцам и формирование итоговой таблицы.
Думаю нужно в начале убрать объединения: [vba]
Код
Sub tt() Dim cc As Range, r As Range, rr As Range, t For Each cc In Selection.CurrentRegion If cc.MergeCells Then t = cc.Value: Set r = cc.MergeArea: cc.UnMerge For Each rr In r: r = t: Next End If Next End Sub
[/vba] А затем цикл по столбцам и формирование итоговой таблицы.Hugo
Убрали объединение, далее цикл по столбцам (со второго), в нём вложенный по строкам (с третьей). Если есть значение - увеличиваем индекс out-таблицы, копируем в неё значения из "шапок" и количество, сразу можно прописать и формулу. Если таблицы огромные - можно результат собирать в массиве (сразу создать его по возможному максимуму, выгрузить собранное по факту).
Да, т.к. мешают объединения только в первой строке - то нет смысла перебирать всё: [vba]
Код
For Each cc In Selection.CurrentRegion.Rows(1).Cells
[/vba] Так правильнее, и быстрее.
Убрали объединение, далее цикл по столбцам (со второго), в нём вложенный по строкам (с третьей). Если есть значение - увеличиваем индекс out-таблицы, копируем в неё значения из "шапок" и количество, сразу можно прописать и формулу. Если таблицы огромные - можно результат собирать в массиве (сразу создать его по возможному максимуму, выгрузить собранное по факту).
Да, т.к. мешают объединения только в первой строке - то нет смысла перебирать всё: [vba]
Код
For Each cc In Selection.CurrentRegion.Rows(1).Cells
Sub tt() Dim cc As Range, r As Range, rr As Range, t For Each cc In Selection.CurrentRegion If cc.MergeCells Then t = cc.Value: Set r = cc.MergeArea: cc.UnMerge For Each rr In r: r = t: Next End If Next End Sub
[/vba]
Так сделать не получится, потому что в файле объединены несколько ячеек... Давайте лучше исходный покажу, наверное, так будет проще.
Sub tt() Dim cc As Range, r As Range, rr As Range, t For Each cc In Selection.CurrentRegion If cc.MergeCells Then t = cc.Value: Set r = cc.MergeArea: cc.UnMerge For Each rr In r: r = t: Next End If Next End Sub
[/vba]
Так сделать не получится, потому что в файле объединены несколько ячеек... Давайте лучше исходный покажу, наверное, так будет проще.antonio2040
Я в общем и не предлагал портить оригинал. Можно ведь испортить копию, а резульат потом скопировать в оригинал. Считайте это за идею. P.S. Посмотрел новые оригиналы таблиц - ну извините, идея теперь одна - пусть их обрабатывает тот, кто их такие придумал Вот зачем там эти объединения? Трудно ширину столбцов изменить? В одном месте где 100 на два столбца, там вроде как оно нужно - но ведь тоже не настолько, хотя визуально так можно сделать и без объединения ячеек.
Я в общем и не предлагал портить оригинал. Можно ведь испортить копию, а резульат потом скопировать в оригинал. Считайте это за идею. P.S. Посмотрел новые оригиналы таблиц - ну извините, идея теперь одна - пусть их обрабатывает тот, кто их такие придумал Вот зачем там эти объединения? Трудно ширину столбцов изменить? В одном месте где 100 на два столбца, там вроде как оно нужно - но ведь тоже не настолько, хотя визуально так можно сделать и без объединения ячеек.Hugo
Hugo, это выгрузка из 1С. У них всегда такие заморочки с таблицами Excel. Что касается порчи оригиналов, то все они регулярно на почту скидываются, поэтому можно портить сколько влезет. Нужно обработать несколько десятков таких файлов, чтобы в свою 1С'ку загрузить. Вручную, сами понимаете, это очень долго и муторно.
Hugo, это выгрузка из 1С. У них всегда такие заморочки с таблицами Excel. Что касается порчи оригиналов, то все они регулярно на почту скидываются, поэтому можно портить сколько влезет. Нужно обработать несколько десятков таких файлов, чтобы в свою 1С'ку загрузить. Вручную, сами понимаете, это очень долго и муторно.antonio2040