Excel VBA函数用于将非空单元格与用户定义的分隔符连接起来

时间:2014-04-08 06:17:52

标签: excel excel-vba vba

我找到了这段代码:

Function ConcatenateRange(ByVal cell_range As Range, _
                    Optional ByVal seperator As String) As String

Dim cell As Range
Dim newString As String
Dim cellArray As Variant
Dim i As Long, j As Long

cellArray = cell_range.Value

For i = 1 To UBound(cellArray, 1)
    For j = 1 To UBound(cellArray, 2)
        If Len(cellArray(i, j)) <> 0 Then
            newString = newString & (seperator & cellArray(i, j))
        End If
    Next
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(seperator)))
End If

ConcatenateRange = newString

End Function

它将范围合并到一个单元格中(CONCATENATES单元格,并在每个部分之间添加一个空格)。我多次尝试编辑它以添加&#34;,#34;而是在每个项目之间。问题是它引用了范围A1:A1000,我可能只使用10行或全部。我只是不希望它在我没有填充的每个单元格的组合结束时有额外的,,,,,,

还要创建副本,在每个项目的右侧添加;

如何编辑它以向左或向右添加这些部分,但仅用于填充的单元格。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你的宏已经有效了。 =ConcatenateRange(A1:A14,",") A1A4的数字为1,2,3,4,{{1}}。

答案 1 :(得分:1)

如果使用空格连接单个列,则可以将代码缩短为单行

A1:A1000,

连接
x = Join(Filter(Application.Transpose(Application.Evaluate("=IF(Len(A1:A1000)>0,A1:a1000,""x"")")), "x", False), ",")

A1:A1000:

连接
x = Join(Filter(Application.Transpose(Application.Evaluate("=IF(Len(A1:A1000)>0,A1:a1000,""x"")")), "x", False), ":")

答案 2 :(得分:1)

我刚才写了一个函数,它有点灵活,如果需要可以修剪空格等等。也许这会帮助其他有类似问题的人。

ifdef