Задать вопрос
@vova1213

Как сместить ячейки из разных столбиков в один в том же порядке?

Здравствуйте. Есть большой файл, в нем три столбика. Нужно объединить их в один, но чтобы ячейки шли в том же порядке. Для наглядности ниже пример. Заранее спасибо за ответ.

5abf7a6224a51184203255.png
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@vova1213 Автор вопроса
Уже нашел подходящий макрос:

Sub Макрос()

Dim sh As Worksheet
Dim lr As Long, lc As Long, i As Long


'1. Отключение монитора, чтобы ускорить макрос.
Application.ScreenUpdating = False

'2. Vba-именование активного листа, чтобы обращаться к листу по имени "sh".
Set sh = ActiveSheet

'3. Проверка, что нет скрытых строк, т.к. некоторые действия не работают, если скрыты строки.
If sh.Rows.SpecialCells(xlCellTypeVisible).Rows.Count <> sh.Rows.Count Then
Application.ScreenUpdating = True
MsgBox "Отобразите все строки, чтобы не было непредвиденных ситуаций.", vbExclamation
Exit Sub
End If

'4. Проверка, что нет скрытых столбцов, т.к. некоторые действия не работают, если скрыты столбцы.
If sh.Columns.SpecialCells(xlCellTypeVisible).Columns.Count <> sh.Columns.Count Then
Application.ScreenUpdating = True
MsgBox "Отобразите все столбцы, чтобы не было непредвиденных ситуаций.", vbExclamation
Exit Sub
End If

'5. Поиск последней строки с данными по столбцу A.
lr = sh.Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row

For i = lr To 1 Step -1

'6. Поиск последнего столбца в текущей строке.
lc = sh.Rows(i).Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Column

'7. Если только одна ячейка с данными, то никакие действия не надо делать.
If lc = 1 Then
GoTo metka_NextRow
End If

'8. Вставка нужного кол-ва пустых строк.
sh.Rows(i + 1).Resize(lc - 1).Insert

'9. Копирование данных из строки в столбец.
sh.Cells(i, "A").Resize(lc).Value = WorksheetFunction.Transpose(sh.Cells(i, "A").Resize(, lc).Value)

'10. Очистка строки.
sh.Cells(i, "B").Resize(, lc - 1).ClearContents

metka_NextRow:
Next i

'11. Включение монитора.
Application.ScreenUpdating = True

End Sub
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы