文章背景: 在Excel中,對數(shù)值的排序依據(jù)是數(shù)值的大小、對文本的排序依據(jù)是文本首字母。但是對文本與數(shù)字組合形式,excel排序的結(jié)果有時不盡如人意。如下的一列數(shù)據(jù),是通過Sort升序后的結(jié)果:
可以看到,排序后的結(jié)果并不是我們想要的1,7,8,12,13。
面對這種情況,我們可以通過添加輔助列,然后基于輔助列進行排序。
單元格C2內(nèi)的公式:TEXT(MID(B2,10,4),'0000')
通過錄制宏的方式,得到sort排序的VBA代碼,整理之后,記錄如下:
Sub 單條件排序()
'1 設(shè)置排序的條件
With ActiveSheet.Sort.SortFields
.Clear '清除工作表所有的SortFields對象。
.Add2 Key:=Range('C2:C6'), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
'2 排序
With ActiveSheet.Sort
.SetRange Rows('2:6') '排序區(qū)域
.Header = xlNo '排序區(qū)域不包含標題
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
(1)上述代碼的功能是,基于輔助列(C列),對2至6行進行升序排列。
(2)DataOption
有兩個選擇,分別是xlSortNormal
和xlSortTextAsNumbers
。上述代碼內(nèi)采用的是xlSortNormal。
xlSortNormal -- default. Sorts numeric and text data separately.
xlSortTextAsNumbers -- Treat text as numeric data for the sort.
單元格C2內(nèi)的公式:MID(B2,11,1)
單元格D2內(nèi)的公式:TEXT(MID(B2,12,4),'0000')
通過錄制宏的方式,得到sort排序的VBA代碼,整理之后,記錄如下:
上述代碼的功能是,基于輔助列(C列和D列),對2至8行進行升序排列。
參考資料:
[1] vba多條件排序(https://www.csdn.net/tags/NtTaYgzsNTA1MTUtYmxvZwO0O0OO0O0O.html)
[2] “一網(wǎng)打盡”Excel排序過程中遇到的那些“坑”(https://cloud.tencent.com/developer/news/486934)
[3] XlSortDataOption enumeration(https://docs.microsoft.com/en-us/office/vba/api/excel.xlsortdataoption)
[4] 只需兩步,輕松解決Excel數(shù)據(jù)混亂的問題(https://cloud.tencent.com/developer/news/879855)
聯(lián)系客服