エクセル初心者です。オフィス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
ここまで***
先の質問を締め切ってしまったため、
もう一度質問させていただきました。
ご回答よろしくお願いします。
No.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さん、何度もありがとうございます。
おかげさまで
希望のものができました!
残念ながら
私には式の意味が全くといっていいくらい理解できていないのですが、
これを機に、少しマクロも勉強してみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
条件に応じて特定の行を非表示...
-
Excelでセル内の数式は残し値だ...
-
整数行を残し小数点の行を削除...
-
Excel2007で、太字にした行のみ...
-
Excelで連続印刷をするマクロ
-
エクセルで全ての数字間にカン...
-
行の入れ替えってどうするの?
-
Excel にて非表示行を探すワー...
-
Excelで連続した1以上の数値の...
-
エクセルで、行ごとの並び替え...
-
「マクロ」の足し算の式を教え...
-
Excelで周期的に列を削除する方法
-
エクセル VBA 小数点を含む数字...
-
エクセルを使って英文から単語...
-
excel ある部分だけをコピペし...
-
Excel2007 セルを右方向に削除...
-
並べ替えのマクロで対象行の範...
-
Excel(VBA)データ入力に応じて...
-
Excelで更新日を自動的に入れたい
-
Excelで同じシートのコピーを一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
条件に応じて特定の行を非表示...
-
Excel2007で、太字にした行のみ...
-
「マクロ」の足し算の式を教え...
-
Excelで連続印刷をするマクロ
-
Excelでセル内の数式は残し値だ...
-
エクセル VBA 小数点を含む数字...
-
エクセルで、行ごとの並び替え...
-
エクセルで全ての数字間にカン...
-
Excel(VBA)データ入力に応じて...
-
Excel にて非表示行を探すワー...
-
Excel2007 セルを右方向に削除...
-
VBA コピーを有効行までループ...
-
Excelで周期的に列を削除する方法
-
excel ある部分だけをコピペし...
-
wordのvbaでハイパーリンク設定...
-
エクセルで連番をマクロで
-
値貼り付けをしても書式も貼り...
-
エクセル マクロ オートシェ...
-
Excel 2013 文字列内の文字重複...
-
並べ替えのマクロで対象行の範...
おすすめ情報