繁体   English   中英

将范围转换为逗号分隔的字符串

[英]Convert range to comma delimited string

如果我有一个这样的专栏:

Col1
abc
def
ghi
jkl

如何将其转换为这样的字符串?:

"abc,def,ghi,jkl"

您可以使用Join()函数用分隔符连接一维数组的所有元素。

下面使用Transpose()函数来形成多维数组(此方法适用于单列或单行)。

Sub Main()
    Dim arr
    arr = Join(Application.Transpose(Range("A2:A5").Value), ",")
    MsgBox arr
End Sub

或作为 UDF

Public Function Merge(r As Range) As String
    Merge = Join(Application.Transpose(r.Value), ",")
End Function

万一您需要更重的机械,请使用以下答案中提供的解决方案之一。 对于包含数百万个单元格的范围,我遇到了类似的挑战。 在这种情况下JOIN会导致崩溃。

在这里检查问题: Turn Excel range into VBA string

我已经测试了上述链接中提供的所有方法。 基于函数JOIN解决方案性能缓慢,甚至导致崩溃。

通过所有单元格的普通循环JOIN函数快得多。 接受答案中的刺痛生成器甚至更快。 使用字符串构建器,由数百万个单元组成的字符串可在几秒钟内构建。 这是我最终得到的解决方案。

双转置适用于对单行值进行字符串连接。 感谢@user2140173 和@brettdj!

debug.print join(Application.Transpose(Application.Transpose(Range("A1:G1").Value)),",")

Public Function COLSASLIST(Rng As Range) As String Dim tempStr1 As String tempStr1 = Replace(Replace(Join(Application.Transpose(Application.Transpose(Rng.Value)), ","), ",,", ""), ",,", ",") If Right(tempStr1, 1) = "," Then tempStr1 = Left(tempStr1, Len(tempStr1) - 1) COLSASLIST = tempStr1 End Function Public Function ROWSASLIST(Rng As Range) As String Dim tempStr1 As String tempStr1 = Replace(Replace(Join(Application.Transpose(Rng.Value), ","), ",,", ","), ",,", ",") If Right(tempStr1, 1) = "," Then tempStr1 = Left(tempStr1, Len(tempStr1) - 1) ROWSASLIST = tempStr1 End Function

使用Microsoft 365/Excel2019 (+/-Mac) 和 Excel for the Web的新动态工作表TextJoin() ,您可以使用以下范围参数构建 udf

  • (1) 一列
  • (2)连续甚至
  • (3) 连续范围输入(例如“A2:C5”)

可选的第二个参数ExcludeBlanks允许省略空白值。

函数结果是一个逗号分隔的列表(对于情况(3)很重要:阅读顺序是按)。

Function Rng2List(rng As Range, Optional ExcludeBlanks As Boolean = True) As String
    Rng2List = WorksheetFunction.TextJoin(",", ExcludeBlanks, rng)
End Function

请参阅Textjoin 功能的帮助

暂无
暂无

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

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