使用 & 连接 excel 中的一系列单元格
Joining a range of cells in excel using &
我知道我可以像这样使用 &
连接一组单元格:
A1 & B1 & C1 & D1
。有没有办法使用 &
为范围 A1:P1
编写此代码?
您可以使用一系列列中的公式(每列按顺序连接前一列)或使用 UDF(用户定义函数).
公式方法
F2中的公式为,
=A2
G2中的公式为,
=IF(LEN(B2), F2&","&B2, F2)
向右填充 G2 以捕获所有可用的文本值。
VBA UDF 方法
点击 Alt+F11 并且当 VBE 打开时,立即使用 pull-down 菜单插入 ► 模块 (Alt+I,M)。将以下内容粘贴到标题为 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 到 return 到您的工作表。
语法很简单,
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, ";")
来演示更改分隔符的能力。
对于您拥有的一维范围(单个列或行),您可以试试这个
对于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
我知道这是一个老问题,但我找到了一种使用 Concatenate
的方法,就像@brettdj 所说的那样。使用 this link 中的方法,您可以使用 Concatenate
和 Transpose
的组合将范围连接在一起,如下所示:
Let say the cells you want to combine are in B2:B19
.
In a blank cell, where you want to concatenate all the values type =CONCATENATE(TRANSPOSE(B2:B19))
Don’t press enter yet.
Select the TRANSPOSE(B2:B19) portion and press F9. This replaces the TRANSPOSE(B2:B19)
with its result
Now remove curly brackets {
and }
Press Enter & you're Done!
来自 link 的演示:
(来源:chandoo.org)
我知道我可以像这样使用 &
连接一组单元格:
A1 & B1 & C1 & D1
。有没有办法使用 &
为范围 A1:P1
编写此代码?
您可以使用一系列列中的公式(每列按顺序连接前一列)或使用 UDF(用户定义函数).
公式方法
F2中的公式为,
=A2
G2中的公式为,
=IF(LEN(B2), F2&","&B2, F2)
向右填充 G2 以捕获所有可用的文本值。
VBA UDF 方法
点击 Alt+F11 并且当 VBE 打开时,立即使用 pull-down 菜单插入 ► 模块 (Alt+I,M)。将以下内容粘贴到标题为 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 到 return 到您的工作表。
语法很简单,
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, ";")
来演示更改分隔符的能力。
对于您拥有的一维范围(单个列或行),您可以试试这个
对于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
我知道这是一个老问题,但我找到了一种使用 Concatenate
的方法,就像@brettdj 所说的那样。使用 this link 中的方法,您可以使用 Concatenate
和 Transpose
的组合将范围连接在一起,如下所示:
Let say the cells you want to combine are in
B2:B19
.In a blank cell, where you want to concatenate all the values type
=CONCATENATE(TRANSPOSE(B2:B19))
Don’t press enter yet.
Select the TRANSPOSE(B2:B19) portion and press F9. This replaces the
TRANSPOSE(B2:B19)
with its resultNow remove curly brackets
{
and}
Press Enter & you're Done!
来自 link 的演示:
(来源:chandoo.org)