如何用数字sortingexcel值

我有一个从文件夹中读取文件名的macros。 问题是当文件名像A1,A2 ….. A200.pdf那样串联时,就像在这个图像中一样:

在这里输入图像说明

那么它在Excel中读取为A1,A10,A100,A101 ….. A109,A11,A110 ….. A119,A20,如图所示:

在这里输入图像说明

我怎样才能这样sorting,以便Excel中的值与文件夹文件名相同,或者有什么方法可以在Excel本身sorting?

您可以使用助手列在Excel中进行sorting。 创build一个新的列,并在“= LEN(A1)”中计算文件名的长度。 然后使用两级sorting来sorting文件名。 数据 – >sorting:在第一级使用长度,在第二级使用文件名。

另一种select是,您可以使用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 

这是因为在这两种情况下(Windows资源pipe理器和Excel)不同的sortingalgorithm的发生的过程,如果你想了解, 请参考这篇文章 。

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

如果我可以假设文件名的模式是AXXX.pdf,即一个字母A,那么数字,4个字符的文件扩展名。 你可以使用这个function

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

这通过从string之间拉出一些字符来工作。 根据假设,数字从第二位开始,这就是为什么第二个参数是2.然后决定,你拉了多less个字符,你知道所有的字符除了'A'(1个字符)和'.pdf'(4个字符)编号。 那么,把整个名字的长度,减less5个字符。 你得到你的号码部分,你可以sorting。

这将是你的结果: 在这里输入图像说明

最好的方法是将Excel列表中的文件名改为前导零。 而不是A19,请参考该文件为A019,它将正确sorting。 在助手列中使用此公式转换文件名。

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

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

将公式从第2行复制到最后。 复制助手列,将Values粘贴到位,当一切都完美时,用助手replace原始列。

为了容纳数字后面的固定数字,可以调整上面的公式。 下面的公式将包含4个附加字符,例如“.pdf”(包括句点)。

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