Вот еще один метод, который должен быть быстрее, чем цикл по всем строкам.
Прежде всего это звезда в конце листа и петли назад.
Этот метод использует метод .End(xlUp)
для перехода по пустым строкам к следующим данным, а затем использует .CurrentRegion
, чтобы найти все данные до следующей пустой ячейки, чтобы затем присоединиться к ней.
Поскольку он перепрыгивает через пустые области, он должен быть быстрее, чем проходить по всем ячейкам.
Option Explicit
Public Sub MergeConinousCells()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim RangeToJoin As Range
Set RangeToJoin = ws.Cells(ws.Rows.Count, "A") 'initialize with very last cell
Do Until RangeToJoin.Row <= 1 'loop until we reach the first row
Set RangeToJoin = RangeToJoin.Offset(RowOffset:=-1).Resize(RowSize:=1).End(xlUp).CurrentRegion.Resize(ColumnSize:=1)
If RangeToJoin.Rows.Count > 1 Then 'if more than one cell in this area then join them
ws.Cells(RangeToJoin.Row, "C").Value = Join(WorksheetFunction.Transpose(RangeToJoin), ";")
Else 'only one cell so transfer value only
ws.Cells(RangeToJoin.Row, "C").Value = RangeToJoin.Value
End If
Loop
End Sub