返回列表 上一主題 發帖

[發問] VBA 請問字數+字母排序怎麼做

回復 10# s13030029

Sub TEST_A3()
Dim R&, Arr, LN&
R = Cells(Rows.Count, 1).End(xlUp).Row
If R < 3 Then Exit Sub
With Range("A2:A" & R)
     Arr = .Value
     For i = 1 To .Count
         LN = Len(Arr(i, 1))
         Arr(i, 1) = 100 + IIf(LN = 0, 99, LN) & "|" & Arr(i, 1)
     Next i
     .Value = Arr
     .Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
     .Replace "*|", "", Lookat:=xlPart
End With
End Sub

TOP

回復 11# 准提部林
謝謝 准大~這是我要的~感恩
就是說先做字數剖析存到陣列再依字母排列

TOP

回復 12# s13030029


G03 >> 3個字 >> 變成 103|G03
FK2156 同理變成 106|FK2156
空白 則 變成 199|

即可依字數排序, 且空白的排到最後, 再將"*|"之前的數字替換為空!

TOP

回復 13# 准提部林
准大您好~
我有新的問題想請教,就是說我的產品編號有 "OAE-008-3" 這種的
如果要做字母及編號大小排序的話要怎麼改?
排序前                         排序後
A001                              A001
B001                              B001
OCB-001                     OAE-007-1
OBB-001                      OAE-008-2
OAE-008-3                 OAE-008-3
OAE-012                     OAE-012
OAE-007-1                 OBB-001
OAE-008-2                 OCB-001

TOP

回復 14# s13030029

看文字有規律, 直接排序不行嗎???
或者有其它狀況, 上傳檔案看看~~

TOP

回復 15# 准提部林
因為之前是依字數所以OAE-008-3這種較長的會在最後

TOP

回復 16# s13030029
看起來 結果是 一樣的 一般排序也可以
Range(Cells(Rows.Count, 1).End(xlDown), Cells(2, 1)).Sort Cells(2, 1)

TOP

回復 14# s13030029

借用准大修改如下
Sub TEST()
Dim R&, Arr, LN&
R = Cells(Rows.Count, 1).End(xlUp).Row
If R < 3 Then Exit Sub
With Range("A2:A" & R)
    Arr = .Value
    For i = 1 To .Count
        ipos = InStr(5, Arr(i, 1), "-")
        If ipos > o Then
            xR = Mid(Arr(i, 1), 1, ipos - 1)
            Arr(i, 1) = 100 + IIf(LN = 0, 99, ipos - 1) & "|" & Arr(i, 1)
        Else
            LN = Len(Arr(i, 1))
            Arr(i, 1) = 100 + IIf(LN = 0, 99, LN) & "|" & Arr(i, 1)
        End If
      Next i
      .Value = Arr
      .Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
      .Replace "*|", "", Lookat:=xlPart
End With
End Sub

TOP

回復 18# samwang
謝謝大大解決了我的問題~~感激不盡!!

TOP

回復 11# 准提部林


    謝謝論壇,謝謝前輩
後學藉此帖學習前輩的方案,將方案設計為同字數後再排序,學習方案如下,請前輩再指導

前輩指導的方法:


後學延伸學習的方法:



Option Explicit
Sub TEST_A4()
Dim R&, Arr, LN&, i&
R = Cells(Rows.Count, 1).End(xlUp).Row
If R < 3 Then Exit Sub
With Range("A2:A" & R)
     Arr = .Value
     For i = 1 To .Count
         LN = 10 - Len(Arr(i, 1))
         Arr(i, 1) = Application.Rept("|", LN) & Arr(i, 1)
     Next i
     .Value = Arr
     .Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
     .Replace "|", "", Lookat:=xlPart
End With
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題