Объединить (не пустые) имена в один столбец
[1]
На первом шаге вы можете назначить диапазон данных (переменная объекта, например, rng
) для варианта 1-мерного массива поля данных на основе 1 с помощью одной строки v = rng
или v = rng.Value2
.
[2]
На втором шаге вы перебираете все строки массива и проверяете наличие непустых имен, объединяя эти выводы в первых столбцах массива (перезаписывая исходную часть с одним именем).
[3]
Изменение размера диапазона приема только до 1 столбца (а количество непустых строк позволяет записывать результаты обратно на лист.
Пример кода
Option Explicit ' declaration head of your code module enforces declaration of variables/objects
Sub ConcatenateNames()
Dim v As Variant, rng As Range
With ThisWorkbook.Worksheets("MySheet") ' <<~~ change to your sheet name
' [1] assign names to 2-dim datafield array v
Set rng = .Range("BD2:BE1000") ' set user defined range to memory
v = rng.Value2 ' get data
' [2] loop through data
Dim i As Long, ii As Long
For i = 1 To UBound(v)
' [2a] check for non empty names
If Len(Trim(v(i, 1)) & Trim(v(i, 2))) > 0 Then
' [2b] concatenate first and last names in array v
ii = ii + 1 ' increment counter
v(ii, 1) = v(i, 1) & " " & v(i, 2)
End If
Next i
' [3] write back to sheet and resize receiving range to ii rows and 1 column
rng.Clear ' clear original data
rng.Resize(ii, 1) = v ' write names back to sheet
End With
End Sub
Дополнительная подсказка
Позаботьтесь о ведущей точке .
до «Диапазон» , ссылаясь на объект вашего листа: Set rng = .Range("BD2:BE1000")