Excel2007VBAのランダム置換ソース
Excel(エクセル)2007VBAを使って、
「複数ある、同一の置換したい文字・数」 を 「複数の文字・数」 でランダムに置換したいのですが、
VBAソースが分かりません。
たとえば、
【A列】に
A1:私は(置換する所)と(置換する所)が得意です。
A2:彼は(置換する所)と(置換する所)と(置換する所)が特技です。
A3:彼女は(置換する所)と(置換する所)と(置換する所)と(置換する所)の選手です。
A4:彼らは(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)が好きです。
A5:あの人は(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)をしたことがありません。
と入力されている時に、
【B列】に
B1:拳闘
B2:柔道
B3:野球
B4:籠球
B5:打球
B6:羽球
B7:剣道
B8:卓球
B9:水泳
B10:避球
と入力したとします。
そして、コマンドボタンを押すと
【A列】にあるすべての 「(置換する所)」 を、 【B列】にある「拳闘」「柔道」「野球」「籠球」「打球」「羽球」「剣道」「卓球」「水泳」「避球」のどれかで必ず置換されるようにします(【ランダムで置換】されるようにしたいです)。
※置換の条件として、一つのセル内で同じ文字が重複しないようにしたいです。
(私は拳闘と拳闘が得意です。)
↑ ↑
同じ文字が2つ以上ある置換は失敗です。
---------------------------------
置換の成功例 (重複なしの置換)
◆置換前の【A列】A5
あの人は(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)と(置換する所)をしたことがありません。
↓↓↓
◆置換後の【A列】A5
あの人は打球と柔道と水泳と剣道と避球と拳闘をしたことがありません。
---------------------------------
これが未完成のVBAソースです。
↓↓↓
Sub test_Click()
For Each CellA In Range("A1:A5").Cells
Rnd1 = Int(Rnd() * 10) + 1
Rnd2 = Int(Rnd() * 9) + 1
Rnd3 = Int(Rnd() * 8) + 1
Rnd4 = Int(Rnd() * 7) + 1
Rnd5 = Int(Rnd() * 6) + 1
Rnd6 = Int(Rnd() * 5) + 1
If Rnd2 = Rnd1 Then Rnd2 = Rnd2 + 1
If Rnd3 = Rnd2 Then Rnd3 = Rnd3 + 1
If Rnd4 = Rnd3 Then Rnd4 = Rnd4 + 1
If Rnd5 = Rnd4 Then Rnd5 = Rnd5 + 1
If Rnd6 = Rnd5 Then Rnd6 = Rnd6 + 1
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd1, 2), , 1)
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd2, 2), , 1)
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd3, 2), , 1)
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd4, 2), , 1)
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd5, 2), , 1)
CellA.Value = Replace(CellA, "(置換する所)", Cells(Rnd6, 2), , 1)
Next
End Sub
【補足】
※コマンドボタンを押すとランダム置換される仕様です。
※1回限定の置換ではなく、コマンドボタンを押すたびに(何度でも)ランダム置換できるようにしたいです。
※上記の【A列】【B列】の文字はあくまで例です。実際は、【A列】【B列】ともに自由に文字を変更できる応用の利く仕様にしたいです(Excelの【A列】【B列】に、文字を直接入力して変更するという意味です)。
※上記の【A列】が5行、【B列】が10行というのもあくまで例です。実際は、【A列】【B列】ともに何行にでも対応できる仕様にしたいです(具体的には【A列】【B列】ともに、10000行くらいまで対応できるのが理想です)。
長くなりましたが、ここまでの条件を満たすVBAソースが知りたいです。
どうかよろしくおねがいいたします。
お礼
すみません。 データ自体がおかしかったみたいで、 データを作りなおしてるうちに動きました。 正確にどこのデータが原因だったのかまでは わかりませんでした・・。 申し訳ないです。