Объединить информацию из двух столбцов - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть имя в столбце A и фамилия в столбце B, и мне нужно объединить их в один столбец A. Также не уверен, нужно ли мне проверять это в коде, но некоторые ячейки сейчас пустыимена.Я перепробовал много вещей, но все они хотят, чтобы я вытащил их и ввел их в другой или третий столбец.Но мне нужно поместить их в столбец A.

Это код, который у меня есть, и он продолжает давать мне ошибку слияния.

With Worksheet

    For Counter = LastRow To FirstRow Step -1
        Range("BD2:BE1000").Merge Across:=True
    Next Counter

End With

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Объединить (не пустые) имена в один столбец

  • [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")

0 голосов
/ 19 апреля 2019

Вы можете просто использовать здесь конкатенацию строк (при условии, что lastrow (1000) и firstrow (2) были правильно настроены в вашем примере кода).

With Worksheet    
    For Counter = LastRow To FirstRow Step -1
        .Range("BD" & counter).Value = .Range("BD" & counter).value & .Range("BE" & counter).value
    Next Counter    
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...