例如
A1:I
A2:am
A3:a
A4:boy
我想将它们全部合并到一个单元格“ Iamaboy”中
此示例显示4个单元格合并为1个单元格,但是我有很多单元格(超过100个),我不能使用A1 & A2 & A3 & A4
我的方法一一键入它们吗?
Answers:
我向您展示了我的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
ConcatenateRange
!愚蠢的ExcelCONCATENATE
函数不会接受一个范围作为输入,只有个别细胞作为独立参数的列表...
Else newString = newString & (separator & Space(1))
因为我需要在结果字符串中保留固定宽度。
如果您希望在不使用VBA的情况下执行此操作,则可以尝试以下操作:
现在,单元格B999将包含您要查找的串联文本字符串。
在简单的情况下,您可以使用不需要创建函数或将代码复制到多个单元格的下一个方法:
在任何单元格中编写下一个代码
=Transpose(A1:A9)
其中A1:A9是您要合并的单元格。
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- - )。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数组的一种众所周知的方法,但是看起来很糟糕。一个更优雅的解决方案是将其隐藏在JoinXL
VBA功能中。
对于拥有Excel 2016(我想是下一版本)的用户,现在直接有CONCAT函数,它将替换CONCATENATE函数。
因此在Excel 2016中执行此操作的正确方法是:
=CONCAT(A1:A4)
会产生:
我是一个男孩
对于较早版本的Excel的用户,其他答案也很重要。
CONCAT
功能
对于Mac上的Excel 2011,情况有所不同。我将其分为三个步骤进行。
=B1
。对于N行的下一行,公式为=Concatenate(",",A2)
。您最终得到:质量检查 ,塞库利 ,测试 ,Applitools ,视觉测试 ,测试自动化 ,硒
=B1
。对于N的所有其他行,公式为=Concatenate(C1,B2)
。你会得到:品质保证 质量检查,Sekuli,测试 质量检查,Sekuli,测试,Applitools 质量检查,Sekuli,测试,应用工具,外观测试 质量检查,Sekuli,测试,应用工具,外观测试,测试自动化 质量保证,Sekuli,测试,应用工具,外观测试,测试自动化,硒
列表的最后一个单元格将是您想要的。这与Windows或Mac上的Excel兼容。
=CONCATENATE(B1;",";A2)
。然后,您必须在单元格中向右拖动所有行的向下的点,最后的值将是结果
我使用此CONCATENATE
方法来获取列的值,并用引号将引号引起来,并在其之间插入列,以便快速填充WHERE IN ()
SQL语句的子句。
我总是只键入=CONCATENATE("'",B2,"'",",")
然后选择它,然后将其向下拖动,以创建=CONCATENATE("'",B3,"'",",")
,=CONCATENATE("'",B4,"'",",")
等等,然后突出显示整个列,将粘贴复制到纯文本编辑器,然后在需要时粘贴回去,从而去除行分隔。它有效,但是再次,就像一次交易一样,这对于一直需要它的人来说不是一个好的解决方案。
我知道这确实是一个非常老的问题,但是我试图做同样的事情,却偶然发现了excel中一个称为“ TEXTJOIN”的新公式。
对于问题,以下公式可解决问题
=TEXTJOIN("",TRUE,(a1:a4))
“ TEXTJOIN”的签名解释为TEXTJOIN(delimiter,ignore_empty,text1,[text2],[text3],...)