• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:短文をランダムに組み合わせ、長文を作りたい)

短文をランダムに組み合わせ、長文を作りたい

このQ&Aのポイント
  • エクセル初心者です。オフィス2003を使用しています。
  • シート1のA列の1行目~33行目に短文があります。
  • これをランダムに4~5個抽出し、異なる長文を340通り作成したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

どうも配列に取り込みTransposeで変換する際に256文字以上の文字列がエラーに引っかかるようです。それなら簡単な解決策を思いつきました。 原始的ですが配列を用いず、直接セルに一個ずつ入力させれば大丈夫でした。(若干スピードが落ちますが) Sub test05() Dim myRng As Range '変数宣言 Dim myDic As Object Dim x As Integer, i As Integer, myStr As String, v As String Dim n As Long Randomize '乱数初期化 Set myRng = Sheets("Sheet1").Range("A1:A33") 'データ範囲 Set myDic = CreateObject("Scripting.Dictionary") 'オブジェクト準備 Do Until myDic.Count = 340 'ユニークで340そろうまで x = Int(2 * Rnd) + 4 '乱数で個数設定(4~5) myStr = "" i = 0 Do Until i = x '指定個数になるまで v = myRng(Int(33 * 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 '収録 n = n + 1 Sheets("Sheet2").Cells(n, "B").Value = myStr 'Sheet2に直接記入 End If Loop '繰り返し End Sub

nori213
質問者

お礼

何度もお手間おかけしました。 おかげさまで目的のものができました♪ スピードも全然問題ありませんでした。 またの機会がありましたら、ぜひご教授いただければと思います。 本当にありがとうございました。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 想定される文字数も200~400文字くらいなので 原因はこれのようです。 ためしに255文字で切って見るとエラーにはならないと思います。 Sub test04() 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("Sheet1").Range("A1:A33") 'データ範囲 Set myDic = CreateObject("Scripting.Dictionary") 'オブジェクト準備 Do Until myDic.Count = 340 'ユニークで340そろうまで x = Int(2 * Rnd) + 4 '乱数で個数設定(4~5) myStr = "" i = 0 Do Until i = x '指定個数になるまで v = myRng(Int(33 * Rnd) + 1) '乱数でセル選択 If InStr(myStr, v) = 0 Then '文字列内で重複がなければ myStr = myStr & v '文字列につなげる myStr = Left(myStr, 255) '256文字以上はエラー i = i + 1 'カウント End If Loop '繰り返し If Not myDic.exists(myStr) Then '重複しなければ myDic.Add myStr, x '収録 End If Loop '繰り返し Sheets("Sheet2").Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) '転記 End Sub 役にはたちませんが・・・・。 また別の方法を考えます。少し時間をください。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

nori213さんこんいちは。 またお会いしましたね。 ご提示のコードをそのままコピペしてやってみましたが正常に作動しましたよ。 エラーがでるとしたらSheet1のデータの中にエラー値が混じってないですか?

nori213
質問者

補足

merlionXXさん、いつもありがとうございます。 前回教えていただいたマクロは 非常に使えて重宝してます(*^ ^*) 念のため、 マクロで使う部分だけを新規にエクセルで作成して 何度かやってみたのですが、 同じ結果でした。 1つのセルに入る文字数を少なくしてみると 上の式で問題なく動作するのですが、 長文になると なぜか上記のエラーが出てしまいます。 実際に使う短文が ホームページ用のタグ 例えば<br>,<font>などを含んでいることが原因なのでしょうか? ただ、この場合でも 抽出数を2~3個にすると問題なく動作しますし、 4~5個抽出した場合に想定される文字数も200~400文字くらいなので、特に問題はないと思われます。 ちなみに「Sheet1のデータの中にエラー値」というのは どういったものがエラー値になるのでしょうか?

関連するQ&A