Если ваш диапазон данных от A: ALC заполнен, то этот вариант кода массива очень быстро сформирует ваш новый диапазон в столбцах A и B
Обратите внимание, что предупреждение переполнено, код не выполнится, если он встретитсяПустой столбец или столбец из одной ячейки не может быть создан как вариантный массив.Если это так, то мне нужно будет добавить тестирование диапазона, поэтому, пожалуйста, сообщите.
[Обновлено для обработки пустых диапазонов и / или отдельных ячеек]
Sub Combine()
Dim OrigA
Dim OrigB
Dim strA As String
Dim strB As String
Dim strDelim As String
Dim lngCol As Long
strDelim = "||"
strA = Join(Application.Transpose(Range([a1], Cells(Rows.Count, "A").End(xlUp))), strDelim)
strB = Join(Application.Transpose(Range([b1], Cells(Rows.Count, "b").End(xlUp))), strDelim)
For lngCol = Columns("C").Column To Columns("ALC").Column - 2 Step 2
If Application.CountA(Columns(lngCol)) > 1 Then
'handle odd column range
strA = strA & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol), Cells(Rows.Count, lngCol).End(xlUp))), strDelim))
Else
'handle odd column single cell
If Len(Cells(1, lngCol)) > 0 Then strA = strA & (strDelim & Cells(1, lngCol).Value)
End If
If Application.CountA(Columns(lngCol + 1)) > 1 Then
'handle even column range
strB = strB & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol + 1), Cells(Rows.Count, lngCol + 1).End(xlUp))), strDelim))
Else
'handle even column single cell
If Len(Cells(1, lngCol + 1)) > 0 Then strB = strB & (strDelim & Cells(1, lngCol + 1).Value)
End If
Next
OrigA = Application.Transpose(Split(strA, strDelim))
OrigB = Application.Transpose(Split(strB, strDelim))
[a1].Resize(UBound(OrigA, 1), 1) = OrigA
[b1].Resize(UBound(OrigB, 1), 1) = OrigB
End Sub