首页 > 解决方案 > 连接字符串并删除多余的逗号

问题描述

我正在尝试连接多个字符串并用逗号分隔它们,然后删除多余的、前导和尾随的逗号。

例如,输入TEST("", "b", "c", "", ""),我想得到 b, c

但是,我的正则表达式,$| ,+|^,并没有真正考虑到重复的逗号:

Function TEST(a, b, c, d, e)
    res = a & ", " & b & ", " & c & ", " & d & ", " & e

    Debug.Print (res)
    Dim regex As Object, str, result As String
    Set regex = CreateObject("VBScript.RegExp")

    With regex
      .Pattern = ",$| ,+|^,"
    End With

    Dim ReplacePattern As String
    ReplacePattern = ""

    res = regex.Replace(res, ReplacePattern)

    TEST = res
End Function

我怎样才能做到这一点?

标签: regexexcelvba

解决方案


最优雅的是@ScottCraner 的建议(如果他希望将其发布为他自己的,将删除这部分答案)TEXTJOIN

Private Function nonEmptyFields(ParamArray strings() As Variant) As String
    nonEmptyFields = WorksheetFunction.TextJoin(",", True, Array(strings))
End Function

在此处输入图像描述

注意:这仅适用于 Office 365+,但您始终可以创建自己的版本 TEXTJOIN


另一种选择是遍历ParamArray字符串并将它们添加在一起,具体取决于它们的内容(它们是填充的还是空的)

Private Function nonEmptyFields(ParamArray strings() As Variant) As String

    Dim result As String
    Dim i As Byte

    For i = LBound(strings) To UBound(strings)
        If Len(strings(i)) <> 0 Then
            If result = vbNullString Then
                result = strings(i)
            Else
                result = result & "," & strings(i)
            End If
        End If
    Next i

    nonEmptyFields = result

End Function

两者都将产生所需的结果与设置

    Debug.Print nonEmptyFields(a, b, c, d, e, f) ' "", "b", "c", "", "", ""

在此处输入图像描述


推荐阅读