標題:

VBA EXCEL

發問:

在 A1 至 J10, 一百個 CELL 內, 隨機在不同位置放下 30 個數字, 數字數值由 1 - 1000, 如本人需要將這 30 個數字由小到大排序, 依次放在 A1 至 C10, 30個 CELL 內. VBA 應如何寫法呢?

最佳解答:

下列 macro, 將 A1:J10 的 數目(數目可重覆), 依序排列到 A11:20. Dim A(1000) Dim ran1 As Range Dim ran2 As Range Sub sor()For i = 1 To 1000: A(i) = 0: Next iSet ran1 = Range("a1:j10") Set ran2 = Range("a11:c20")ran2.ClearContentsFor Each e In ran1 If e >= 1 Then A(e) = A(e) + 1 Nextr = 11: c = 0 For i1 = 1 To 1000 If A(i1) > 0 Then For i2 = 1 To A(i1) c = c + 1 If c > 3 Then r = r + 1 c = 1 End IfCells(r, c) = i1 Next i2End If Next i1 End Sub 2011-01-06 16:15:45 補充: 應是 "依序排列到 A11:C20 ".

其他解答:

免費註冊體驗

 

此文章來自奇摩知識+如有不便請留言告知

1.) 為何要先放在A1:J10, 何不直接放在A1:C10 2.) 應說明是否容許隨機數重複 2011-01-06 10:17:07 補充: A1:J10內放30個隨機數: Sub macro1() Set ar1 = [a1:j10] ar1.ClearContents For i = 1 To 30 999: a = Int(Rnd() * 100 + 1) If IsEmpty(ar1(a)) Then ar1(a) = Int(Rnd() * 1000 + 1) Else GoTo 999 End If Next End Sub ___ ___ a1:j10內的30個數字放在k1:m10內順排 Sub macro2() Set ar1 = [a1:j10] [k1:m30].ClearContents For Each x In ar1 If Val(x) >= 1 Then n = n + 1 Cells(n, "k") = x End If Next [k1:k30].Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom [k11:k20].Cut [L1] [k21:k30].Cut [m1] End Sub|||||因為工作上有這個大約相同問題出現, 所以才會這樣問 其實主要是在一個 selected area 內, 有多個不同數字, 隨意放在不同位置 現只想將 selected area 內的所有數字順序排列, 至於是否在左上角開始, 這不成問題 2011-01-09 10:00:27 補充: 對漢鍾離兄的提示, 都同樣對我有啟發及很有幫助, 謝謝
arrow
arrow

    nzphddr 發表在 痞客邦 留言(0) 人氣()