Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 连接两列中的信息_Excel_Vba - Fatal编程技术网

Excel 连接两列中的信息

Excel 连接两列中的信息,excel,vba,Excel,Vba,我的名字在A列,姓氏在B列,我需要将它们合并到A列中。我也不确定是否需要在代码中检查这一点,但一些单元格中的名称为空。我尝试了很多方法,但他们都希望我将这两种方法合并到另一列或第三列。但我需要把它们放在A栏 这是我的代码,它一直给我合并错误 With Worksheet For Counter = LastRow To FirstRow Step -1 Range("BD2:BE1000").Merge Across:=True Next Counter En

我的名字在A列,姓氏在B列,我需要将它们合并到A列中。我也不确定是否需要在代码中检查这一点,但一些单元格中的名称为空。我尝试了很多方法,但他们都希望我将这两种方法合并到另一列或第三列。但我需要把它们放在A栏

这是我的代码,它一直给我合并错误

With Worksheet

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

End With

您可以在这里使用字符串连接(假设在示例代码中正确设置了lastrow(1000)和firstrow(2))

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

  • [1]
    在第一步中,您可以通过单线
    v=rng
    v=rng.Value2
    将数据范围(对象变量,例如
    rng
    )分配给基于变量1的二维数据字段数组
  • [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
Option Explicit“代码模块的声明头强制声明变量/对象
子级联名称()
尺寸v作为变型,rng作为范围

使用此工作簿。工作表(“我的工作表”)'如果没有任何代码,这个问题会很快解决。您需要尝试一下,然后发布您尝试过的内容。请看,我尝试了几种可能的解决方案,但它们都给出了有关包含数据的两个单元格的错误,并且不允许我连接名字和姓氏。我添加了上面使用的基本代码。我我可能遗漏了一些简单的东西。它看起来应该可以工作,但在第一次出错。值表示它是对属性的无效使用。或者我将等号粗指为减号。已修复。请重试。如果使用了
with
,您也应该在每个
。范围
@KekuSemau中使用它。我遗漏了它。我已编辑添加了t帽子
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