返回列表 上一主題 發帖

排序!!

回復 3# hcm19522

感謝hcm19522前輩提供解答,十分值得研究.

小弟本想另開新主題提問,因想提的問題為VBA,應不屬一般區的範圍內.
但因問題是源於此主題,故用回文方式,
若有不妥還請不吝告知,小弟一定改進,十分感謝.

小弟看到此主題後有試著用板上前輩的程式碼擅自修改,試圖寫出類似結果.
附上檔案及程式碼,希望能夠有所幫助.有不當處請不吝告知,小弟一定改進.
因功力太差,修改出來的程式碼非常冗長,而且有一個問題,就是要先將原始資料用excel的內建功能排序過後,結果才可正常顯示....

若有前輩願意抽空指點更簡潔的寫法,小弟感激不盡.
  1. '此程式碼修改自麻辣家族討論區excel高手淮提部林前輩所寫,非我自創.
  2. '討論區網址:http://forum.twbts.com/index.php

  3. Sub test1()
  4. Dim arr, arr1, arr2, arr3, arr4, brr(1 To 4), k, Ar
  5. arr = Range("a2:b" & Cells(Rows.Count, 1).End(xlUp).Row)


  6. '巨集錄製excel的從小到大排序功能(排序B欄)
  7.     ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
  8.     ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2"), _
  9.         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  10.     With ActiveWorkbook.Worksheets("Sheet1").Sort
  11.         .SetRange Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row)
  12.         .Header = xlNo
  13.         .MatchCase = False
  14.         .Orientation = xlTopToBottom
  15.         .SortMethod = xlPinYin
  16.         .Apply
  17.     End With
  18. '錄製結束


  19. '計算每個科目出現的次數
  20. Set myD = CreateObject("scripting.dictionary")
  21. For k = 1 To UBound(arr)
  22. T = arr(k, 1)
  23. myD(T) = myD(T) + 1
  24. Next k


  25. ReDim arr1(1 To myD("英文"))
  26. ReDim arr2(1 To myD("國文"))
  27. ReDim arr3(1 To myD("數學"))
  28. ReDim arr4(1 To myD("自然"))


  29. For i = 1 To UBound(arr)

  30. If arr(i, 1) = "英文" Then N = 1
  31. If arr(i, 1) = "國文" Then N = 2
  32. If arr(i, 1) = "數學" Then N = 3
  33. If arr(i, 1) = "自然" Then N = 4

  34. brr(N) = brr(N) + 1

  35. If N = 1 Then arr1(brr(1)) = arr(i, 2)
  36. If N = 2 Then arr2(brr(2)) = arr(i, 2)
  37. If N = 3 Then arr3(brr(3)) = arr(i, 2)
  38. If N = 4 Then arr4(brr(4)) = arr(i, 2)

  39. 101:
  40. Next i


  41. [e2] = Join(arr1, "、")
  42. [e3] = Join(arr2, "、")
  43. [e4] = Join(arr3, "、")
  44. [e5] = Join(arr4, "、")

  45. End Sub
複製代碼
20161025-陣列-排序科目分數.zip (12.78 KB)


小弟不知此種發問方式以及用板上前輩程式碼修改去回答板友問題的方式是否恰當,
若有不妥當處請不吝指正與告知,小弟一定改進,十分感謝.

TOP

回復 5# 准提部林

等了一陣,
可能Cyssuc版友有點事未及回應,請允許小弟擅自回應一下,雖然不是我發的主題....
因個人理解,有前輩願意提供解答,可以的話能夠回應使用情形並表示感謝會是比較好的.
當然以上僅個人理解.言論有不當處請告知,小弟一定改進.

非常感謝淮提部林前輩提供解答,雖然不是原提問者,也是表達一下感謝.板友提的問題,其實有時候也會是自己想問的問題呢.

TOP

        靜思自在 : 要批評別人時,先想想自己是否完美無缺。
返回列表 上一主題