返回列表 上一主題 發帖

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

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

如圖所示,請問要如何達到字數少到多,再依字母A-Z進行排序



附檔 test.rar (13.99 KB)

本帖最後由 ikboy 於 2020-10-14 16:36 編輯
  1. Sub zz()
  2. Dim a, b, c As Object, d As Object, i&, j&, n&, k
  3. Set d = CreateObject("scripting.dictionary")
  4. a = Range("a2:a" & [a65536].End(3).Row).Value
  5. ReDim aa(1 To UBound(a))
  6. For Each b In a
  7.     n = Len(b)
  8.     d(n) = d(n) & "|" & b
  9. Next
  10. k = d.keys
  11. With Application
  12.     For i = 1 To d.Count
  13.         n = .Small(k, i)
  14.         t = Split(Mid(d(n), 2), "|")
  15.         Set c = CreateObject("system.collections.arraylist")
  16.         For Each b In t
  17.             c.Add b
  18.         Next
  19.         c.Sort
  20.         For Each b In c
  21.             j = j + 1
  22.             a(j, 1) = b
  23.         Next
  24.     Next
  25. End With
  26. [d2].Resize(j) = a
  27. End Sub
複製代碼

TOP

回復 2# ikboy
太神啦!!!
謝謝大大~

TOP

  1. Sub tt()
  2. Dim Arr, Brr, n&
  3. n = [A65536].End(xlUp).Row
  4. With [B2].Resize(n - 1)
  5.     .Formula = "=LEN(A2)"
  6.     .Value = .Value
  7. End With

  8. With Range([A1], [B65536].End(xlUp))
  9.     Brr = .Value
  10.     .Sort Key1:=.Item(2), Order1:=xlAscending, Header:=xlYes
  11.     Arr = .Value
  12.     .Value = Brr
  13. End With

  14. [d1].Resize(UBound(Arr)) = Arr
  15. Range("B2:B" & n) = ""
  16. End Sub
複製代碼

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

Sub TEST()
With Range([B1], [A65536].End(xlUp))
     .Columns(2) = "=LEN(A1)"
     .Sort Key1:=.Item(2), Order1:=xlAscending, _
           Key2:=.Item(1), Order2:=xlAscending, Header:=xlYes
     .Columns(2).ClearContents
End With
End Sub

TOP

回復 6# 准提部林

學到一個思考邏輯

   謝謝

TOP

本帖最後由 s13030029 於 2020-10-16 10:46 編輯

回復 6# 准提部林
整個縮短很多是沒錯,但是如果我旁邊欄已經有其他資料了,沒辦法在旁邊計算Len()的話要怎麼改???
PS.因為有寫其他程式碼,不方便再做欄位更動

TOP

回復 8# s13030029

邏輯都一樣, 變通一下即可:
Xl0000145.rar (14.48 KB)

TOP

回復 9# 准提部林
准大 Sorry~ 可能我沒有說的很詳細
就是說我只有單純產品編號那欄要重新排序,其他欄的資料不需要一起變動~

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題