我知道我可以使用&
连接一组单元格,如下所示:
A1 & B1 & C1 & D1
。有没有办法使用A1:P1
为范围&
写这个?
答案 0 :(得分:4)
您可以使用一系列列中的公式(每个列按顺序连接)或使用 UDF (用户定义函数)来完成此操作。
公式方法
F2中的公式为
=A2
G2中的公式是,
=IF(LEN(B2), F2&","&B2, F2)
向右填充G2以捕获所有可用的文本值。
VBA UDF方法
点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 我,中号)。将以下内容粘贴到标题为 Book1 - Module1(Code)的新窗格中。
Function udf_stitch_Together(r As Range, Optional d As String = ", ") As String
Dim s As String, c As Range
For Each c In r
If CBool(Len(c.Text)) Then _
s = s & IIf(Len(s), d, vbNullString) & c.Text
Next c
udf_stitch_Together = s
End Function
点按 Alt + Q 返回工作表。
语法很简单,
udf_stitch_Together(<range to concatenate>, <[optional] delimiter>)
出于您的目的,这将是,
=udf_stitch_Together(A2:P2)
......或,
=udf_stitch_Together(A2:P2, ", ")
根据需要填写。请注意,我在F5:F6中使用=udf_stitch_Together(A5:P5, ";")
来演示更改分隔符的能力。
答案 1 :(得分:1)
对于1D范围(单个列或行),您可以尝试这个
对于Row
,您的示例,它将被称为
=StrCat(A1:P1, TRUE)
Function StrCat(rng1 As Range, bRows As Boolean) As String
If bRows Then
'row
StrCat = Join(Application.Transpose(Application.Transpose(rng1)), ", ")
Else
'column
StrCat = Join(Application.Transpose(rng1), ", ")
End If
End Function
答案 2 :(得分:1)
我知道这是一个老问题,但我找到了一种方法来使用@ setTimeout
,就像@brettdj所说的那样。使用this link中的方法,您可以使用Concatenate
和Concatenate
的组合将范围连接在一起,如下所示:
假设要合并的单元格位于
Transpose
。在空白单元格中,您要连接所有值类型
B2:B19
请勿按Enter键。
选择TRANSPOSE(B2:B19)部分并按F9。这将
=CONCATENATE(TRANSPOSE(B2:B19))
替换为其结果现在删除大括号
TRANSPOSE(B2:B19)
和{
按Enter&amp;你做完了!
来自链接的演示:
Image http://img.chandoo.org/q/concatinate-transpose-trick.gif