Excel 英文加數字順序vba

2011-09-07 8:01 am
我有一組編號, 用vba來做順序, 結果變成如下
A1
A10
A109
A11
A12
A123
A12A
A12B
A16
A168
A18
A188
A199
A1B
A2
A22
A26
A27
A506
A511
A518
A522
A526
A535
A556
A558
A566
A58
如果我想變成如下, 我的vba應該如何改?
A1
A1B
A2
A10
A11
A12
A12A
A12B
A16
A18
A22
A26
A27
A58
A109
A123
A168
A188
A199
A506
A511
A518
A522
A526
A535
A556
A558
A566

Private Sub CommandButton2_Click()
Range("A5:D203").Sort _
Key1:=Range("A5")
Range("A5").Select
End Sub

回答 (4)

2011-09-10 8:00 am
✔ 最佳答案
1. First Press Alt + F11 > Insert Module > Copy and paste follow code


Function ExtractNumber(txt As String)

Dim i As Integer
Dim Num As String
For i = 1 To Len(txt)
If Asc(Mid(txt, i, 1)) >= 48 And Asc(Mid(txt, i, 1)) <= 57 Then
Num = Num & Mid(txt, i, 1)
End If
Next i
ExtractNumber = Num
End Function

2. Create Formula as follow:


圖片參考:http://f10.wretch.yimg.com/akpuser09/53/1992180412.jpg?6aGQixZDfR94YfHozN_rNB7CWBJ0JFFi6FI_cd1XjaKzWMeSpDX2Jj6NK6.IHg--




2011-09-10 00:00:55 補充:
2. Break Down Data with follow formula


Column Formula
1st Col =LEFT(A2,1)
2nd Col =VALUE(extractnumber(A2))
3rd Col =RIGHT(A2,LEN(A2)-(LEN(C2)+1))

2011-09-10 00:01:32 補充:
3. Data > Sort 2nd Col, then 3rd Col
2011-09-09 5:52 am
如該組編號是人手輸入, 則應統一編號的結構, 特別是數字及之前部份, 必須一律長度
如該些編跑是從網頁或其他渠道而來, 那亦祇能夠面對現實, 想辨法處理
最佳方法如001所言, 要多插一欄作輔助, 編寫公式, 再排序
VBA用sort,是不會改變sort的排序常規而達到你的要求
2011-09-08 9:31 am
樓上既意見真係無里頭,又答唔到人,仲要一論廢話

以前我遇過同樣問題,數字編號由另外程式轉換過來,當時有同事寫過類似VB,我記得係用INDEX指令,具體不太記得
2011-09-08 12:47 am
一睇就知, 又係啲經驗不足嘅人, 粗製濫造, 胡亂定義啲毫無組織性嘅編號就當交功課, 今時今日嘅就業管理文化, 真係一代不如一代..

複製插入多一攔, 用 code 或公式, 插返晒啲 0 落頭兩個 characters 中間, 平返中間固定 ### 或者 #### 數字, 先至再 sort。

這種問題, 實在連一點寫 code 嘅意欲都無..


收錄日期: 2021-04-20 11:25:18
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20110907000051KK00003

檢視 Wayback Machine 備份