アプリ版:「スタンプのみでお礼する」機能のリリースについて

D4~D23に(2.5.9.15.18.~35.38)10個や、(1.3.4.11.18.20.~31.33.39.40)18個の様に
その時々で、昇順ですが不規則な数値になります。
これをマクロでD列内にランダムに並べ替えたいのですが、上手く出来ません。
出来れば似通った結果にならないようにしたいのです。

どなたか教えいただけませんでしょうか、宜しくお願いします。

A 回答 (2件)

以下のマクロを標準モジュールに登録してください。


D4~D23のセルが並べ替えの対象になります。
----------------------------------------
Option Explicit

Public Sub ランダム並べ替え()
Dim ary() As String
Dim ary2() As String
Dim flag As Boolean
Dim i, j, row As Long
i = 0
For row = 4 To 23
If Cells(row, "D").Value <> "" Then
ReDim Preserve ary(i)
ary(i) = Cells(row, "D").Value
i = i + 1
End If
Next
If i = 0 Then
MsgBox ("処理対象データなし")
Exit Sub
End If
ReDim ary2(i - 1)
For i = 0 To UBound(ary2)
ary2(i) = ""
Next
Randomize
For i = 0 To UBound(ary)
flag = False
Do
j = Int(Rnd * (UBound(ary) + 1))
If ary2(j) = "" Then
ary2(j) = ary(i)
flag = True
End If
Loop While flag = False
Next
i = 0
For row = 4 To 23
If i <= UBound(ary2) Then
Cells(row, "D").Value = ary2(i)
Else
Cells(row, "D").Value = ""
End If
i = i + 1
Next
MsgBox ("完了")
End Sub
--------------------------------------------
    • good
    • 0
この回答へのお礼

ここまでしていただいて申し訳ありません。
早速使わせていただきます、有り難う御座います。

お礼日時:2017/03/25 12:43

EXCELで手作業で出来ることですから


マクロ記録して再現すればいいです。

E4:E23に=RAND()を入力
その範囲をコピー、そのまま値で貼り付け
D4:E23をE列で並び替え、その後E列を消去。

あ、23までと限らないんですね。

じゃ、そこだけ
Range(Range("e4"),Range("d30").end(xlup).offset(0,1))
に変更するといいでしょう。

手作業だとE4を選択して入力
それをオートフィルみたいになりますが
マクロは選択要らないので
上記のRangeに一気に入力でOKです。

並び替えの方は
Range(Range("e4"),Range("d30").end(xlup))
ですね。
    • good
    • 0
この回答へのお礼

早速のお答え有り難う御座います。
マクロ登録して一部変更ですね、有り難う御座います。

お礼日時:2017/03/25 08:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!