Если вы скопируете приведенный ниже код в модуле, он должен делать то, о чем вы просите (убедитесь, что лист с вашими данными является активным листом). Там нет проверки на достоверность данных - предполагается, что:
- лист с данными представляет собой активный лист,
- есть данные в колонке А
и выводит результат в колонке B .
Option Explicit
Public Sub doIt()
Dim data As Variant
Dim result As Variant
Dim i As Long
Dim j As Long
data = ActiveSheet.UsedRange
ReDim result(1 To UBound(data, 1), 1 To 1) As Variant
j = 1
For i = 1 To UBound(data, 1)
If data(i, 1) = "" Then
j = j + 1
Else
result(j, 1) = result(j, 1) & data(i, 1)
End If
Next i
With ActiveSheet
.Cells(1, 2).Resize(UBound(result, 1), 1) = result
End With
End Sub
Транспонирование не очень хорошо работает в этом случае, поскольку у меня есть ячейки более 500 КБ, разделенные пустой ячейкой в этом столбце, и для каждой пустой ячейки необходимо преобразовать их в строки. – knarusk
Используя только Excel, вы должны скопировать каждый блок букв, а затем вам нужно вставлять их с помощью транспонирования каждый раз. Я не думаю, что это можно сделать за один шаг, не используя макросы. –
Слишком много ячеек для использования транспонирования, так что да, тогда нужен макрос. – knarusk