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

red*_*dan 78 excel vba

例如

A1:I
A2:am
A3:a
A4:boy 
Run Code Online (Sandbox Code Playgroud)

我想将它们全部合并到一个单元格"Iamaboy"
这个例子显示4个单元格合并为1个单元格但是我有很多单元格(超过100个),我不能使用A1 & A2 & A3 & A4我能做什么来逐个输入它们?

Mis*_*nab 145

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

  1. 将您的数据放在单元格A1:A999(或类似单元格)中
  2. 将单元格B1设置为"= A1"
  3. 将单元格B2设置为"= B1和A2"
  4. 将单元格B2一直复制到B999(例如,复制B2,选择单元格B3:B99并粘贴)

单元格B999现在将包含您要查找的连接文本字符串.

  • 这对于一次性工作(通常是这样的问题)来说并不浪费.这是要走的路,因为它可以让你看到正在发生的事情,而且你可以轻松地进一步修改连接操作(添加分隔符等).对于一次性工作,VBA就像使用大锤破解螺母一样. (13认同)
  • 这很浪费,但很棒! (8认同)
  • 我需要一些简单的东西 - 这完美无缺. (6认同)
  • 如果要复制值: - 复制(ctrl + c)最后一个单元格(B999),单击空单元格,然后在"主页"选项卡上的"剪贴板"组中的"粘贴"图标下,单击"粘贴值". (2认同)

aev*_*nko 87

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

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

=ConcatenateRange(A1:A4)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Jean!我已经采纳了你的建议!迈克尔,你错过了这一点 - 为数百个细胞做这件事是乏味和毫无意义的. (10认同)
  • +1但我会称之为`ConcatenateRange`!愚蠢的Excel`CONCATENATE`函数不接受作为输入的范围,只接受单个单元格列表作为单独的参数... (3认同)
  • 这是不必要的,而功能上只需添加= A1&A2&A3&A4就足够了,而添加A1&“”&A2&“”&A3&“”&A4将为您在每个单元格的值之间留一个空格。 (2认同)

KCD*_*KCD 40

里面CONCATENATE你可以使用TRANSPOSE,如果你展开它(F9),然后卸下周围的{}括号像这样建议

=CONCATENATE(TRANSPOSE(B2:B19))
Run Code Online (Sandbox Code Playgroud)

=CONCATENATE("Oh ","combining ", "a " ...)
Run Code Online (Sandbox Code Playgroud)

CONCATENATE(移调(B2:B19))

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

=B1&" "
=B2&" "
=B3&" "
Run Code Online (Sandbox Code Playgroud)

  • 为精美的 .gif 插图点赞 (2认同)

y.s*_*hyk 24

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

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

    =Transpose(A1:A9) 
    
    Run Code Online (Sandbox Code Playgroud)

A1:A9是您想要合并的单元格.

  1. 没有离开细胞压力 F9

之后,单元格将包含字符串:

={A1,A2,A3,A4,A5,A6,A7,A8,A9}
Run Code Online (Sandbox Code Playgroud)

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

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


Jea*_*ett 14

使用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
Run Code Online (Sandbox Code Playgroud)

用法示例:

=JoinXL(TRANSPOSE(A1:A4)," ") 
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


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

对于水平范围,您必须执行双重操作TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))
Run Code Online (Sandbox Code Playgroud)

内部TRANSPOSE将1×4二维阵列转换为4×1二维阵列,TRANSPOSE然后外部转换为预期的4元素一维阵列.

在此输入图像描述

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

  • 这似乎比接受的答案更好. (3认同)

gvo*_*gvo 9

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

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

=CONCAT(A1:A4)
Run Code Online (Sandbox Code Playgroud)

这将产生:

我是一个男孩

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