如何将列中的行合并到excel中的一个单元格中?

时间:2011-11-15 11:57:56

标签: excel vba excel-vba

E.g

A1:I
A2:am
A3:a
A4:boy 

我想将它们全部合并到一个单元格“Iamaboy”中 此示例显示4个单元格合并为1个单元格但是我有许多单元格(超过100个),我无法使用A1 & A2 & A3 & A4逐个键入它们我能做什么?

9 个答案:

答案 0 :(得分:145)

如果您不想在没有VBA的情况下执行此操作,可以尝试以下操作:

  1. 将您的数据放在单元格A1:A999(或类似)
  2. 将单元格B1设置为“= A1”
  3. 将单元格B2设置为“= B1& A2”
  4. 将单元格B2一直复制到B999(例如复制B2,选择单元格B3:B99并粘贴)
  5. 单元格B999现在将包含您要查找的连接文本字符串。

答案 1 :(得分:85)

我向您展示了我的ConcatenateRange VBA功能(感谢Jean的命名建议!)。它将采用一系列单元格(任何尺寸,任何方向等)并将它们合并为一个单独的字符串。作为可选的第三个参数,您可以添加分隔符(如空格或分隔的逗号)。

在这种情况下,你要写这个来使用它:

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell))
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function

答案 2 :(得分:39)

CONCATENATE内,您可以使用TRANSPOSE展开它( F9 ),然后移除周围{}括号,如this推荐

=CONCATENATE(TRANSPOSE(B2:B19))

变为

=CONCATENATE("Oh ","combining ", "a " ...)

CONCATENATE(TRANSPOSE(B2:B19))

您可能需要在最后添加自己的分隔符,例如创建一个C列并转置该列。

=B1&" "
=B2&" "
=B3&" "

答案 3 :(得分:24)

在简单的情况下,你可以使用下一个方法,它不需要你创建一个函数或将代码复制到几个单元格:

  1. 在任何单元格中编写下一个代码

    =Transpose(A1:A9) 
    
  2. A1:A9是您要合并的单元格。

    1. 不离开单元格F9
    2. 之后,单元格将包含字符串:

      ={A1,A2,A3,A4,A5,A6,A7,A8,A9}
      

      来源:http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

      更新:一部分可能含糊不清。不离开单元格意味着让您的单元格处于编辑器模式。另外,您可以在单元格编辑器面板中按F9(通常可以在电子表格上方找到)

答案 4 :(得分:13)

使用VBA已存在的Join功能。 VBA函数不会在Excel中公开,因此我将Join包装在公开其功能的用户定义函数中。最简单的形式是:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

使用示例:

=JoinXL(TRANSPOSE(A1:A4)," ") 

作为数组公式输入(使用 Ctrl - Shift - Enter )。

enter image description here


现在,JoinXL只接受一维数组作为输入。在Excel中,范围返回二维数组。在上面的示例中,TRANSPOSE将4×1二维数组转换为4元素的一维数组(这是TRANSPOSE在单列二进制时记录的行为 - 维数组)。

对于水平范围,您必须执行双TRANSPOSE

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

内部TRANSPOSE将1×4二维数组转换为4×1二维数组,外部TRANSPOSE然后转换为预期的4元素一维数组。

enter image description here

TRANSPOSE的这种用法是一种众所周知的在Excel中将2D数组转换为1D数组的方法,但它看起来很糟糕。更优雅的解决方案是将其隐藏在JoinXL VBA函数中。

答案 5 :(得分:9)

对于那些 Excel 2016 (我想下一个版本)的人,现在直接有CONCAT函数,它将取代CONCATENATE函数。

因此,在Excel 2016中执行此操作的正确方法是:

=CONCAT(A1:A4)

将产生:

  

Iamaboy

对于旧版本Excel的用户,其他答案是相关的。

答案 6 :(得分:3)

对于Mac上的Excel 2011,它有所不同。我这是一个三步过程。

  1. 在A列中创建一列值。
  2. 在列B中,在第一个单元格的右侧,创建一个规则,该规则在列值和&#34;,&#34;上使用连接函数。例如,假设A1是第一行,B1的公式是=B1。对于行N的下一行,公式为=Concatenate(",",A2)。你最终得到:
  3. QA
    ,Sekuli
    ,Testing
    ,Applitools
    ,Visual Testing
    ,Test Automation
    ,Selenium
    
    1. 在C列中,创建一个连接所有先前值的公式。因为它是添加剂,所以最终会得到所有。单元格C1的公式为=B1。对于N的所有其他行,公式为=Concatenate(C1,B2)。你得到:
    2. QA,Sekuli
      QA,Sekuli,Testing
      QA,Sekuli,Testing,Applitools
      QA,Sekuli,Testing,Applitools,Visual Testing
      QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation
      QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation,Selenium
      

      列表的最后一个单元格将是您想要的。这与Windows或Mac上的Excel兼容。

答案 7 :(得分:2)

我使用CONCATENATE方法获取列的值并用它们之间的列包装引号,以便快速填充SQL语句的WHERE IN ()子句。

我总是只需输入=CONCATENATE("'",B2,"'",","),然后将其选中并向下拖动,这会创建=CONCATENATE("'",B3,"'",",")=CONCATENATE("'",B4,"'",",")等,然后突出显示整列,将粘贴复制到纯文本编辑器并在需要时粘贴,从而剥离行分离。它有效,但同样,就像一次性交易一样,对于那些一直需要这个的人来说,这不是一个好的解决方案。

答案 8 :(得分:0)

我知道这确实是一个非常老的问题,但是我试图做同样的事情,却偶然发现了excel中一个名为“ TEXTJOIN”的新公式。

对于问题,以下公式可以解决问题

=TEXTJOIN("",TRUE,(a1:a4))

“ TEXTJOIN”的签名解释为TEXTJOIN(分隔符,ignore_empty,text1,[text2],[text3],...)