- ベストアンサー
エクセルでのランダム抽出・並び替えについて
- エクセル初心者の方がオフィス2003を使用している場合に、Sheet1の任意の範囲からランダムに20〜21個のデータを抽出し、ランダムに並び替えたものをSheet2のB列に1000個作成する方法を教えてください。
- オフォス2003を使用しているエクセル初心者の方が、Sheet1のA1〜A55までの55行にバナナ、リンゴ、みかんなどの文字列が入力されている場合、Sheet1からランダムに20〜21個のデータを抽出し、ランダムに並び替えたものをSheet2のB列に1000個作成したいと思っています。質問した内容を改変して自分でマクロを作成しましたが、正しく動作しません。どのように修正すればよいでしょうか?
- エクセル初心者の方が、Sheet1の任意の範囲から20〜21個のデータをランダムに抽出し、ランダムに並び替えたものをSheet2のB列に1000個作成する方法を教えてください。質問した内容を改変して自分でマクロを作成しましたが、正しく動作しません。修正方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
nori213さん、またお会いしましたね。 セル内は一文字ではなく複数個の文字列だったということですね。 ではちょっと直しましょう。 Sub test03() Dim myRng As Range '変数宣言 Dim myDic As Object Dim x As Integer, i As Integer, myStr As String, v As String Randomize '乱数初期化 Set myRng = Sheets("マクロ用1").Range("A1:A55") 'データ範囲 Set myDic = CreateObject("Scripting.Dictionary") 'オブジェクト準備 Do Until myDic.Count = 1000 'ユニークで1000そろうまで x = Int(2 * Rnd) + 20 '乱数で個数設定(20~21) myStr = "" i = 0 Do Until i = x '指定個数になるまで v = myRng(Int(55 * Rnd) + 1) '乱数でセル選択 If InStr(myStr, v) = 0 Then '文字列内で重複がなければ myStr = myStr & v '文字列につなげる i = i + 1 'カウント End If Loop '繰り返し If Not myDic.exists(myStr) Then '重複しなければ myDic.Add myStr, x '収録 End If Loop '繰り返し Sheets("マクロ用2").Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) '転記 End Sub これでいかが?
お礼
merlionXXさん、何度もありがとうございます。 おかげさまで 希望のものができました! 残念ながら 私には式の意味が全くといっていいくらい理解できていないのですが、 これを機に、少しマクロも勉強してみようと思います。 ありがとうございました。