连接两列中的信息

时间:2019-04-19 13:07:46

标签: excel vba

我在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 :(得分:0)

您仅可以在此处使用字符串连接(假设示例代码中已正确设置了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

答案 1 :(得分:0)

将(非空)名称连接到一列

  • [1] 第一步,您可以通过一个线性将您的数据范围(对象变量,例如rng)分配给基于1变量的2维数据字段数组v = rngv = 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")