excel 排序数值VBA

nnvyjq4y  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(151)

我有数据,可以是列表,也可以是行和列,或者其他任何形式。
我有数据条目,如10,1010,11,111,2,201,3210,300100等6个数字是最大值。我想有数据排序
十一○一○十一一一一二○一
而不是像
二十十一一一一二零一一○一○三二一零
任何整洁的方法做这件事。可以使它与过滤器工作,所以我想我需要一些代码,不能弄清楚。
可以使它的工作与过滤器,如果我添加“。”或每一个数字之间的东西。然后只是添加过滤器?......?...?和排序accending。我甚至没有尝试过任何代码。

wfauudbj

wfauudbj1#

没有VBA,只有公式;你可以试试:

B1中的公式:

=SORTBY(A1:A8,LEFT(A1:A8&"00000",6))
xxslljrj

xxslljrj2#

如果VBA中有这些值,则可以通过强制它们为字符串,然后使用<>运算符来按字母顺序对它们进行排序。变量值和数字需要使用CStr或等效运算符转换为字符串。还可以将这些值传递到String变量中,该变量将强制其变为String值。

Sub Example()
    Const VALUES As String = "2 10 11 111 201 1010 3210 300100"
    
    'Value Type is explicitly forced to be String
    Dim ValueArr() As String
    ValueArr = Split(VALUES, " ")
    
    'Bubble Sort - Loop until no further changes are neccesary
    Dim IsFinished As Boolean
    While Not IsFinished
        IsFinished = True
        Dim i As Long
        For i = LBound(ValueArr) To UBound(ValueArr) - 1
            ' The > operator is comparing strings alphabetically because the two values are String
            If ValueArr(i) > ValueArr(i + 1) Then
                'Swap
                Dim tmp As String
                tmp = ValueArr(i)
                ValueArr(i) = ValueArr(i + 1)
                ValueArr(i + 1) = tmp
                IsFinished = False
            End If
        Next
    Wend
    
    Debug.Print Join(ValueArr, " ")
    'Outputs "10 1010 11 111 2 201 300100 3210"
End Sub
icnyk63a

icnyk63a3#

排序分隔单元格

=LET(Data,A2:C14,delSplit,",",delJoin," ",
MAP(Data,LAMBDA(cell,
    IFERROR(TEXTJOIN(delJoin,1,SORT(TRIM(TEXTSPLIT(cell,delSplit,,1)),,,1)),""))))

要在Name Manager中创建自己的LAMBDA函数,例如SortDelimited,您可以使用以下命令...

=LAMBDA(Data,delSplit,delJoin,
MAP(Data,LAMBDA(cell,
    IFERROR(TEXTJOIN(delJoin,1,SORT(TRIM(TEXTSPLIT(cell,delSplit)),,,1)),""))))

当你在工作簿的任何地方使用它的时候,比如简单的...

=SortDelimited(A2:C14,","," ")

相关问题