プロが教えるわが家の防犯対策術!

エクセル初心者です。オフィス2003を使用しています。

Sheet1のA1~A55まで55行ある
各セルにバナナ、リンゴ、みかん・・・などの文字列があります。

これを
Sheet2のB列に
Sheet1からランダムに20~21個抽出し、
みかんリンゴバナナ・・・みたいに
ランダムに並び替えたものを1000個そろえたいと思っています。

http://oshiete1.goo.ne.jp/qa4993926.html
で質問し、回答いただいたのですが、
実際の作業が、質問した内容から改変する必要があったため、
自分で改変してやってみると
「応答なし」の表示が出て、何度やってもうまくできません。

どうやら、上記URLの質問では
A,B,Cといった各セル内の文字が1文字としていたために、
実際の作業のバナナ、リンゴなどといった文字数に対応できないようです。

自分で改変した以下のマクロの式を
どのように改変したら、実際の作業に沿うようにできるのでしょうか?

ここから***

Sub test02()
Dim myRng As Range '変数宣言
Dim myDic As Object
Dim x 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(19 * Rnd) + 20 '乱数で桁数設定(20~21)
myStr = ""

Do Until Len(myStr) = x
v = myRng(Int(55 * Rnd) + 1) '乱数で文字設定
If InStr(myStr, v) = 0 Then '文字列内で重複しなければ
myStr = myStr & v '文字列につなげる
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

ここまで***

先の質問を締め切ってしまったため、
もう一度質問させていただきました。

ご回答よろしくお願いします。

A 回答 (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

これでいかが?
    • good
    • 0
この回答へのお礼

merlionXXさん、何度もありがとうございます。

おかげさまで
希望のものができました!

残念ながら
私には式の意味が全くといっていいくらい理解できていないのですが、
これを機に、少しマクロも勉強してみようと思います。

ありがとうございました。

お礼日時:2009/05/28 15:41

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