VBA EXCEL

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

VBA 應如何寫法呢?

3 個解答

評分
  • joe
    Lv 7
    10 年前
    最愛解答

    下列 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 ".

  • 10 年前

    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

  • 10 年前

    因為工作上有這個大約相同問題出現, 所以才會這樣問

    其實主要是在一個 selected area 內, 有多個不同數字, 隨意放在不同位置

    現只想將 selected area 內的所有數字順序排列, 至於是否在左上角開始, 這不成問題

    2011-01-09 10:00:27 補充:

    對漢鍾離兄的提示, 都同樣對我有啟發及很有幫助, 謝謝

還有問題嗎?立即提問即可得到解答。