如何使用数字对excel值进行排序

时间:2017-06-24 08:14:41

标签: excel vba excel-vba excel-formula

我有一个从文件夹中读取文件名的宏。问题是当文件名串联时,如A1,A2 ...... A200.pdf,如下图所示:

enter image description here

然后在Excel中读取A1,A10,A100,A101 ...... A109,A11,A110 ..... A119,A20,如下图所示:

enter image description here

如何对Excel进行排序以使Excel中的值与文件夹文件名相同,或者我可以在Excel中对其进行排序?

4 个答案:

答案 0 :(得分:2)

您可以使用帮助列在Excel中对此进行排序。创建一个新列并计算“= LEN(A1)”中文件名的长度。然后使用两级排序来对文件名进行排序。数据 - >排序:使用第一级中的长度和第二级中的文件名。

答案 1 :(得分:1)

这是因为在这两种情况下(Windows资源管理器和Excel)Refer to this article中有不同的排序算法,如果你想了解的话。

要解决您的问题,其中一种方法是仅拉出不同单元格(例如B列)中文件名的数字部分,然后根据这些数字进行排序。

如果我可以假设文件名的模式是AXXX.pdf,即一个字母A,则为数字,文件扩展名为4个字符。您可以使用此功能

= VALUE(MID(A1,2,LEN(A1)-5))

这可以通过从字符串之间拉出一些字符来实现。根据假设,数字从第二个位置开始,这就是为什么第二个参数是2.然后决定你拉出多少个字符,你知道所有字符除了' A' (1个字符)和' .pdf' (4个字符)编号。因此,取整个名称的长度减少5个字符。你得到了你可以分类的编号部分。

这将是您的结果: enter image description here

答案 2 :(得分:1)

另一种选择,您可以使用RegEx对象提取数字数字"捕获"在文件名中。

Option Explicit

Sub SortFileNames()

Dim i As Long

With Sheets("Sheet1") ' replaces "Sheet1| with your sheet's name
    For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("B" & i).Value = RetractNumberwithRegex(.Range("A" & i)) ' call the Regex function
    Next i
End With

End Sub

'========================================================================

Function RetractNumberwithRegex(Rng As Range) As String
    ' function uses the Regex object to substract the Numeric values inside

    Dim Reg1 As Object
    Dim Matches As Object

    Set Reg1 = CreateObject("vbscript.regexp")
    With Reg1
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "[0-9]{1,20}"  ' any size numeric string (up to 20 digits length)
    End With

    Set Matches = Reg1.Execute(Rng.Value2)
    If Matches.Count <> 0 Then
        RetractNumberwithRegex = Matches.Item(0)
    End If

End Function

答案 3 :(得分:0)

最好的方法是将Excel列表中的文件名更改为前导零。而不是A19,将文件称为A019,它将正确排序。在辅助列中使用此公式转换文件名。

=Left($A2, 1) & Right("000" & Mid($A2, 2, 3), 3)

请注意,3个零和3个字符串长度都相互关联。要创建4位数的固定长度数,只需使用4个零,并将两个字符串长度增加到4。

将公式从第2行复制到结尾。复制帮助器列,粘贴Values到位,当一切都很完美时,用帮助器替换原始列。

为了容纳数字后面的固定位数,可以调整上述公式。下面的公式将容纳4个额外字符,这些字符跟随数字,例如&#34; .pdf&#34; (包括期间)。

=Left($A2, 1) & Right("000" & Mid($A2, 2, 7), 7)