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


80

例如

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

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


它们是否都是4人一组的垂直组合?还是要在单个单元格中全部使用A列?
Alex K.

给定VBA接受的答案,我们是否可以将这个问题编辑为具有Excel-VBA标记?再有就是这样的问题一直被问到,我想把它们标记为重复,因为这里有答案。
bonCodigo

Answers:


87

我向您展示了我的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
这是不必要的,而功能上只需添加= A1&A2&A3&A4就足够了,而添加A1&“”&A2&“”&A3&“”&A4将为您在每个单元格的值之间留一个空格。
Michael Eakins

3
+1,但我会称呼它ConcatenateRange!愚蠢的ExcelCONCATENATE函数不会接受一个范围作为输入,只有个别细胞作为独立参数的列表...
让·弗朗索瓦·科贝特

10
谢谢让!我采纳了你的建议!迈克尔,您错过了要点-对数百个单元格执行此操作既乏味又毫无意义。
2011年

1
通过传递CHAR(10)传递新行字符,您必须做的是“ = CocatenateRange(A1:A10,CHAR(10))”。:)
aevanko

1
好东西。修改为,Else newString = newString & (separator & Space(1))因为我需要在结果字符串中保留固定宽度。
Crispalot爵士,2014年

149

如果您希望在不使用VBA的情况下执行此操作,则可以尝试以下操作:

  1. 将数据存储在单元格A1:A999中(或诸如此类)
  2. 将单元格B1设置为“ = A1”
  3. 将单元格B2设置为“ = B1&A2”
  4. 将单元格B2一直复制到B999(例如,通过复制B2,选择单元格B3:B99并粘贴)

现在,单元格B999将包含您要查找的串联文本字符串。


2
如果要复制值:-复制(ctrl + c)最后一个单元格(B999),请单击一个空单元格,然后在“主页”选项卡上的“剪贴板”组中的“粘贴”图标下,单击“粘贴值”。
Kanishka

9
这很浪费,但是有点辉煌!
BH

14
对于一次性工作(这通常是这样的问题),这一点都不浪费。之所以这样,是因为它使您可以看到正在发生的事情,并且您可以轻松地进一步修改连接操作(添加分隔符等)。对于一次性工作,VBA就像用大锤将螺母开裂一样。
PeerBr 2014年

1
这不适用于大型数据集。(内存不足)
丹尼尔(Daniel

1
这是天才。
搜寻者

41

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

=CONCATENATE(TRANSPOSE(B2:B19))

成为

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

CONCATENATE(TRANSPOSE(B2:B19))

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

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

2
赞美的.gif图
–N_E

24

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

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

    =Transpose(A1:A9) 
    

其中A1:A9是您要合并的单元格。

  1. 不离开压片机 F9

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

={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键(通常可以在电子表格上方找到它)


不管这是什么,这都是一个巧妙的主意,但是对我来说不起作用。我认为是因为我的文本中包含许多特殊字符,所以没有将它们组合成正确的输出。我最终手动输入a1&b1&c1&......
Chris Marisic

1
克里斯,此解决方案中的一个奇怪之处是,您必须在按F9之前保持对单元格的专注。所谓“保持焦点”,是指让您的编辑器光标闪烁并能够继续输入文本。
y.selivonchyk 2013年

1
击中F9在Mac版本的excel上不起作用。
亚当·埃伯林

15

使用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- - )。ShiftEnter

在此处输入图片说明


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

对于水平范围,您需要做一倍TRANSPOSE

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

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

在此处输入图片说明

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


1
在大表中,此功能比@aevanko的功能要快得多。
Ricidleiv Tondatto

9

对于拥有Excel 2016(我想是下一版本)的用户,现在直接有CONCAT函数,它将替换CONCATENATE函数。

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

=CONCAT(A1:A4)

会产生:

我是一个男孩

对于较早版本的Excel的用户,其他答案也很重要。


1
我安装了Windows的Office 2016 ProPlus,但没有任何CONCAT功能
-oleksa

微软称CONCAT可在Excel中365和2019:support.microsoft.com/en-us/office/...
雷·伍德科克

4

对于Mac上的Excel 2011,情况有所不同。我将其分为三个步骤进行。

  1. 在A列中创建一列值。
  2. 在第一个单元格右侧的B列中,创建一个在列值和“,”上使用串联函数的规则。例如,假设A1为第一行,则B1的公式为=B1。对于N行的下一行,公式为=Concatenate(",",A2)。您最终得到:
质量检查
,塞库利
,测试
,Applitools
,视觉测试
,测试自动化
,硒
  1. 在C列中,创建一个将所有先前值连接在一起的公式。因为它是可加性的,您将在最后得到全部。单元格C1的公式为=B1。对于N的所有其他行,公式为=Concatenate(C1,B2)。你会得到:
品质保证
质量检查,Sekuli,测试
质量检查,Sekuli,测试,Applitools
质量检查,Sekuli,测试,应用工具,外观测试
质量检查,Sekuli,测试,应用工具,外观测试,测试自动化
质量保证,Sekuli,测试,应用工具,外观测试,测试自动化,硒

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


可以在一个公式中连接三个值。我在A栏中有值,B1是A1和B2的副本,其公式为=CONCATENATE(B1;",";A2)。然后,您必须在单元格中向右拖动所有行的向下的点,最后的值将是结果
oleksa

2

我使用此CONCATENATE方法来获取列的值,并用引号将引号引起来,并在其之间插入列,以便快速填充WHERE IN ()SQL语句的子句。

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


0

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

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

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

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


微软称TEXTJOIN可用于Excel 365和2019:support.microsoft.com/en-us/office/...
雷·伍德科克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.