对具有字符和数字的键进行排序

时间:2017-02-13 14:25:32

标签: excel excel-vba sorting vba

我在宏中使用以下代码对所选列进行排序

Range("A14:CE" & lastRow).Sort key1:=Range(Cells(14, Col), Cells(lastRow, Col)), 
_Order1:=xlAscending, Header:=xlNo, key2:=Range("C14:C" & lastRow), Order2:=xlAscending, 
_Header:=xlNo 

我刚刚注意到,当单元格的末尾有数字时,这会表现得很奇怪,就像在这个例子中一样

enter image description here

左栏中的数据将按照右栏中的A到Z排序,这不是我想要的。 我想要1比1,而不是10! 我查了一下这就是Excel本身的排序方式。有没有办法防止它,除了将文本更改为FM-001?

2 个答案:

答案 0 :(得分:1)

是的斯科特是对的,您需要2个单独的文本和数字列,然后对它们进行排序;

如果这是唯一的组合,那么您可以使用

=LEFT(A1,2)

=RIGHT(A1,LEN(A1)-5)

如果你没有共同的模式,但文本首先和那些数字

=LEFT(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A2&"0123456789"))-1)

=RIGHT(A4,LEN(A4)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},A4&"0123456789"))+1)

答案 1 :(得分:1)

没有我的笔记本电脑,但我将在下面概述我的想法:

  1. 检测细胞长度,如果len = 4,则替换" - "与" -0"
  2. 对列进行排序
  3. 检测单元格的第3位,如果它是0,则替换" -0"与" - "