【问题标题】:Convert range to comma delimited string将范围转换为逗号分隔的字符串
【发布时间】:2020-09-15 01:57:35
【问题描述】:

如果我有这样的专栏:

Col1
abc
def
ghi
jkl

我怎样才能把它转换成这样的字符串?:

"abc,def,ghi,jkl"

【问题讨论】:

标签: vba excel


【解决方案1】:

您可以使用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

【讨论】:

【解决方案2】:

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

在此处检查问题: Turn Excel range into VBA string

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      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
      

      【讨论】:

        【解决方案5】:

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

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

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

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

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

        Textjoin function查看帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-18
          • 2018-08-16
          • 2013-09-30
          • 2011-03-26
          • 1970-01-01
          • 1970-01-01
          • 2021-12-18
          • 2012-09-04
          相关资源
          最近更新 更多