2017-04-07 26 views
0

我想使用VBA對房間號碼列表進行排序。然而,一些房間的數字末尾有「A」或「B」來表示套房風格的生活。我想對房間列表進行排序,以便將具有A或B的列表排序到列表的末尾,因爲它們是較長的字符串。我嘗試了VBA中的排序功能,像這樣在VBA中排序不同的長度字符串所以最長的不是最後

StartRange.Sort Key1:=SortRange, Order1:xlAscending 

其中StartRange和SortRange是其他地方定義的Range對象。函數正確排序的數據,但我得到的結果,如

411 
418 
422 
432 
415A 
415B 
428B 

,而我希望他們來進行排序:

411 
415A 
415B 
418 
422 
428B 
432 

我想過嘗試只排序客房爲文本計算前三個字符,然後根據最後一個字母對每個As和Bs塊進行排序,但這會因以下三件事而變得更復雜:

  1. 某些房間是四位數字(例如1195,1045,等等)。這些房間沒有與A或B有任何問題。
  2. 某些房間的前面是「W」或「E」,具體取決於它們位於建築物的西部還是東部。其中一些房間確實有A或B後綴,但它們按照我希望分類的方式正確排序(例如W134,W135A,W135B,W136等)。
  3. 並非所有房間都在Excel中的同一張紙上。我正在從幾個不同建築物的房間主表中進行工作,每張表格都是按建築物排序的。

單元格的格式既是「普通」格式,也是「文本」格式,並且都具有相同的結果。任何可以提供的幫助將非常感謝解決這個問題。先謝謝你!

回答

1

這下面是對這個page

Sub Sort_Special(StartRange As Range, SortRange As Range) 
    Dim i As Long 
    With SortRange 
     For i = 0 To 9 
     .Replace What:=i, Replacement:="ZZZZZ" & i, LookAt:=xlPart, MatchCase:=False 
     Next i 
    End With 

    StartRange.Sort Key1:=SortRange, Order1:=xlAscending, Header:=xlNo 

    With SortRange 
     For i = 0 To 9 
     .Replace What:="ZZZZZ", Replacement:="", LookAt:=xlPart, MatchCase:=False 
     Next i 
    End With 
End Sub 

Excel中什麼是提前適應那些字母排序的數字字段。通過用一個啞數字段替換每個數字,其中數字前綴爲任意字符串'ZZZZZ',您迫使excel將所有字段視爲字母數字。然後,您對這些轉換後的字段進行排序,然後刪除每個「ZZZZZ」序列。

希望你沒有房間號碼以5 Z結尾。

0

您可以插入一個新列並獲取數值,然後在新列上執行排序。

假設你的數據在A列,然後插入一列列A和列(2).Insert和新列將下面的公式

Range("B2:B" & lr).Formula = "=IF(ISERROR(RIGHT(A2,1)*1),LEFT(A2,LEN(A2)-1)*1,A2)" 

其中LR是最後一排,並可以計算。 現在在新列B上排序並最終刪除它。

看看這是你可以使用的東西。

相關問題