VBA EXCEL

2011-01-04 11:57 pm
在 A1 至 J10, 一百個 CELL 內, 隨機在不同位置放下 30 個數字, 數字數值由 1 - 1000, 如本人需要將這 30 個數字由小到大排序, 依次放在 A1 至 C10, 30個 CELL 內.

VBA 應如何寫法呢?

回答 (3)

2011-01-07 12:14 am
✔ 最佳答案
下列 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 ".
2011-01-06 6:17 pm
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

2011-01-06 5:15 am
因為工作上有這個大約相同問題出現, 所以才會這樣問
其實主要是在一個 selected area 內, 有多個不同數字, 隨意放在不同位置
現只想將 selected area 內的所有數字順序排列, 至於是否在左上角開始, 這不成問題

2011-01-09 10:00:27 補充:
對漢鍾離兄的提示, 都同樣對我有啟發及很有幫助, 謝謝


收錄日期: 2021-04-13 17:44:54
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20110104000051KK00598

檢視 Wayback Machine 備份