Всем доброго дня! Искал подобную тему, но к сожалению не нашел. Если такое уже есть, извиняюсь за повтор. Ломаю голову 3й день, все не могу найти решение
Задача: Разделить текст по столбцам по всей таблице.
Нужно, чтобы столбец разделялся так, что значения, разделенные определенным символом (в данном случае символ "\") переносились либо на следующий непустой столбец, а значения в соседнем столбце сдвигались соответственно, и удалять исходный (в примере Лист2), либо переносить текст по столбцам в конец таблицы, а исходный - удалять При всем при этом первая строка просто дублировалась по названию (хотя это мелочи уже я думаю)
Столбцов много, поэтому какой-нибудь заскриптованный в 1 клик макрос был бы тут идеален (но это уже наверное мои мечты, но если реализуемо - то это прекрасно)
Пример файла до/после прикрепил в Лист1/Лист2 прикрепил
Всем доброго дня! Искал подобную тему, но к сожалению не нашел. Если такое уже есть, извиняюсь за повтор. Ломаю голову 3й день, все не могу найти решение
Задача: Разделить текст по столбцам по всей таблице.
Нужно, чтобы столбец разделялся так, что значения, разделенные определенным символом (в данном случае символ "\") переносились либо на следующий непустой столбец, а значения в соседнем столбце сдвигались соответственно, и удалять исходный (в примере Лист2), либо переносить текст по столбцам в конец таблицы, а исходный - удалять При всем при этом первая строка просто дублировалась по названию (хотя это мелочи уже я думаю)
Столбцов много, поэтому какой-нибудь заскриптованный в 1 клик макрос был бы тут идеален (но это уже наверное мои мечты, но если реализуемо - то это прекрасно)
Пример файла до/после прикрепил в Лист1/Лист2 прикрепилkadishev1997
Здравствуйте. Вариант через Power Query. При добавлении новых данных в исходную таблицу правой кнопкой мыши по таблице с результатами -- Обновить
Здравствуйте. Вариант через Power Query. При добавлении новых данных в исходную таблицу правой кнопкой мыши по таблице с результатами -- ОбновитьPelena
Да, неплохой варинт, только минус в том, что нужно применять к каждому столбцу отдельно, + разное кол-во разделителей.
А таких столбцов в исходнике около 500 И файлов в таком формате 68 штук
В идеале, найти такой макрос, который будет обрабатывать сразу всю таблицу по разделителям. Ну либо как-то разбивать на каждый столбец, чтобы он автоматом переходил на следующий, и далее обрабатывал то же самое и по кругу... Макрос забиндить на клавишу или сочитание клавиш и прокликать его.
Логически понимаю, но не хватает смекалки как это правильно обыграть в виде макроса или ему подобного
Да, неплохой варинт, только минус в том, что нужно применять к каждому столбцу отдельно, + разное кол-во разделителей.
А таких столбцов в исходнике около 500 И файлов в таком формате 68 штук
В идеале, найти такой макрос, который будет обрабатывать сразу всю таблицу по разделителям. Ну либо как-то разбивать на каждый столбец, чтобы он автоматом переходил на следующий, и далее обрабатывал то же самое и по кругу... Макрос забиндить на клавишу или сочитание клавиш и прокликать его.
Логически понимаю, но не хватает смекалки как это правильно обыграть в виде макроса или ему подобногоkadishev1997
With Sheets("Лист1") If .FilterMode Then .ShowAllData With .Range("A1").CurrentRegion x = .Value: .ClearContents End With
For j = 1 To UBound(x, 2) ReDim y(1 To UBound(x), 1 To 1): k = 1
For i = 1 To UBound(x) sp = Split(x(i, j), "\") If UBound(sp) + 1 > k Then k = UBound(sp) + 1 ReDim Preserve y(1 To UBound(x), 1 To k) y(1, k) = x(1, j) End If For n = 0 To UBound(sp) y(i, n + 1) = sp(n) Next n Next i
n = .Cells(1, Columns.Count).End(xlToLeft).Column If j > 1 Then n = n + 1 .Cells(1, n).Resize(UBound(y, 1), UBound(y, 2)).Value = y Next j End With End Sub
[/vba]
Добрый вечер вот такой вариант:
[vba]
Код
Sub ertert() Dim x, y(), sp, i&, j&, k&, n&
With Sheets("Лист1") If .FilterMode Then .ShowAllData With .Range("A1").CurrentRegion x = .Value: .ClearContents End With
For j = 1 To UBound(x, 2) ReDim y(1 To UBound(x), 1 To 1): k = 1
For i = 1 To UBound(x) sp = Split(x(i, j), "\") If UBound(sp) + 1 > k Then k = UBound(sp) + 1 ReDim Preserve y(1 To UBound(x), 1 To k) y(1, k) = x(1, j) End If For n = 0 To UBound(sp) y(i, n + 1) = sp(n) Next n Next i
n = .Cells(1, Columns.Count).End(xlToLeft).Column If j > 1 Then n = n + 1 .Cells(1, n).Resize(UBound(y, 1), UBound(y, 2)).Value = y Next j End With End Sub