繁体   English   中英

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

[英]How to merge rows in a column into one cell in excel?

例如

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

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

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

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

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

我向您展示了我的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

CONCATENATE内,如果您将其展开( F9 ),则可以使用TRANSPOSE ,然后按照以下建议删除周围的{}括号

=CONCATENATE(TRANSPOSE(B2:B19))

成为

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

CONCATENATE(TRANSPOSE(B2:B19))

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

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

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

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

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

在此处输入图片说明


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

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

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

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

在此处输入图片说明

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

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

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

=CONCAT(A1:A4)

会产生:

我是一个男孩

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

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

  1. 在A列中创建一列值。
  2. 在第一个单元格右侧的B列中,创建一个在列值和“,”上使用串联函数的规则。 例如,假设A1是第一行,则B1的公式为=B1 对于N行的下一行,公式为=Concatenate(",",A2) 您最终得到:
QA
,Sekuli
,Testing
,Applitools
,Visual Testing
,Test Automation
,Selenium
  1. 在C列中,创建一个将所有先前值连接在一起的公式。 因为它是可加性的,您将在最后得到全部。 单元格C1的公式为=B1 对于N的所有其他行,公式为=Concatenate(C1,B2) 你会得到:
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兼容。

为了快速填充SQL语句的WHERE IN ()子句,我使用CONCATENATE方法获取列的值,并用引号将引号引起来。

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

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

对于问题,下面的公式解决了问题

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

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

我需要一个通用的连接分隔符(因为我没有 TEXTJOIN )所以我写了这个:

Public Function ConcatWS(separator As String, ParamArray cell_range()) As String
    '---concatenate with seperator
    
    For n = LBound(cell_range) To UBound(cell_range)
        For Each cell In cell_range(n)
            If Len(cell) <> 0 Then
                ConcatWS = ConcatWS & IIf(ConcatWS <> "", separator, "") & cell
            End If
        Next
    Next n
End Function

这让我们可以灵活地包含单元格范围:

=ConcatWS(" ", Fields, E1:G2, L6:M9, O6)

注意:“字段”是命名范围,分隔符可能为空

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM