Excel UDF-在单元格中对数字和文本进行排序,并以逗号分隔

时间:2019-04-02 20:17:09

标签: excel vba user-defined-functions

我有一列数据,每个单元格中都有数字和文本,用逗号分隔。我在另一个论坛(请参见下面的代码)中找到了UDF,但它做得并不好。例如:

原始单元格:

  

84,86,NA,268,277,400,411,42,120,244,346

UDF结果:

  

120、244、268、277、346、400、411、42、84、86,不适用

所需结果:

  

42、84、86、120、244、268、277、346、400、411,NA

我想知道是否有人可以帮助我修复此代码。 非常感谢 最好的祝愿 马诺伊

查看我在另一个论坛中找到的UDF的代码

Function StrSort(ByVal sInp As String, _
                  Optional bDescending As Boolean = False) As String
    ' sorts a comma-delimited string
    Dim asSS()  As String    ' substring array
    Dim sSS     As String    ' temp string for exchange
    Dim n       As Long
    Dim i       As Long
    Dim j       As Long

    asSS = Split(sInp, ",")
    n = UBound(asSS)

    For i = 0 To n
        asSS(i) = Trim(asSS(i))
    Next

    If n < 1 Then
        StrSort = sInp
    Else
        For i = 0 To n - 1
            For j = i + 1 To n
                If (asSS(j) < asSS(i)) Xor bDescending Then
                    sSS = asSS(i)
                    asSS(i) = asSS(j)
                    asSS(j) = sSS
                End If
            Next j
        Next i
        StrSort = Join(asSS, ", ")
    End If
End Function

1 个答案:

答案 0 :(得分:2)

您的代码将数组的内容视为文本,因此这就是为什么值按原样排序的原因。

不幸的是,由于您的String(或任何其他{{1},考虑将数组的类型从Long更改为DoubleNA并不那么简单}})值...

这种解决方案不是很优雅,我不希望看到功能这么长,但是可以使用。

String