【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

Windows7 Office365

ご教示いただけましたら幸いです。
各列・各行の単語や文を使って
ランダムに組み換え文章を作成をしたいと考えております。

各列には、それぞれ異なったボリューム(行数が異なる)の
単語や文が入っています。

A1セルに最終的な完成文章を吐き出したいので、
その下は1行空けて
下に記載している各単語・文はA3から入れています。

また、例ではE列までの記載になっていますが、
実際は、E列までやZ列までなど、まちまちです。
行も同様に、2行もあれば、10行もあります。


●A列
わたしは
僕は
私は

●B列
東京都
神奈川県
千葉県
埼玉県
北海道
沖縄県
大阪府
福岡県

●C列
で生まれて、
出身で、
に生を受けて、
にて誕生し、

●D列
青森県
岩手県
山形県
長野県
新潟県

●E列
で育ちました。
にて中学校まで過ごしました。
で小学校まで過ごしました。
で20才まですごしました。

(結果例)
→わたしは埼玉県出身で、長野県で20才まですごしました。
→僕は神奈川県で生まれて、青森県で育ちました。

など、A1にランダムに表示されるようにしたいです。
・A列→最終列まで、順番に1行ずつ選択して、つなげています。
・選択する行は列ごとにランダムです。
・列は1つもとばすことはありません。


このような場合、どのような記述をすればよいか、
ご教示いただけましたら幸いです。
どうぞよろしくお願いいたします。

質問者からの補足コメント

  • ご回答ありがとうございます。
    仰るとおりで、3行目で列数は判ります。

    また、記載忘れをしておりましたが、
    「改行」を何かのルールを決めて出来ると大変助かります。

    よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/16 23:10
  • 何度もお手間を掛けまして恐縮です。
    ②がベストです。
    例えば「改行」とだけ入れておくと、改行されるようなイメージです。
    複数行の改行もしたいと思っていますので、
    2列連続で「改行」と入力することも想定しております。

    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/09/16 23:47
  • 失礼いたしました。
    ②は文字“数”でした・・・。

    ③のその他で、決められた文字=先ほどの補足のとおり

    改行

    とだけ入力されているセル(3行目に入力されている状態)があると
    改行できるとベストです。

      補足日時:2016/09/16 23:49

A 回答 (5件)

「改行」で改行するパターンです。

1行目セル結合したほうが見易いので追加してます。
-----------------------------------------------------------------------
Sub Sample()
Dim 列 As Long
Dim 行 As Long
Dim 終 As Long
Rows("1:1").MergeCells = False
Range("A1").Select
Range("A1").ClearContents
Range(Cells(1, 1), Cells(1, Cells(3, Columns.Count).End(xlToLeft).Column)).MergeCells = True
For 列 = 1 To Cells(3, Columns.Count).End(xlToLeft).Column
終 = Cells(Rows.Count, 列).End(xlUp).Row - 2
行 = Int(終 * Rnd) + 3
If Cells(行, 列).Value = "改行" Then
Range("A1").Value = Range("A1").Value & vbCrLf
Else
Range("A1").Value = Range("A1").Value & Cells(行, 列).Value
End If
Next
End Sub
-----------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

早々にご回答いただきまして、ありがとうございます。
希望通りの結果が得られました。
本当に助かりました。
またこちらで伺うこともあるかと思いますが、
その際は是非よろしくお願いいたします。

お礼日時:2016/09/17 01:00

No.4 の注意



コピペならば問題ありませんが
「Range(Cells(1, 1), Cells(1, Cells(3, Columns.Count).End」
「(xlToLeft).Column)).MergeCells = True」
が2行に分かれて見えるかも知れませんが、本当は1行です。
    • good
    • 0
この回答へのお礼

こちらもご丁寧に補足いただきまして
ありがとうございます。

お礼日時:2016/09/17 01:01

改行の件を考えないならば、こんなものではいかがでしょうか?


-----------------------------------------------------------------------
Sub Sample()
Dim 列 As Long
Dim 行 As Long
Dim 終 As Long
Range("A1").Select
Selection.ClearContents
For 列 = 1 To Cells(3, Columns.Count).End(xlToLeft).Column
終 = Cells(Rows.Count, 列).End(xlUp).Row - 2
行 = Int(終 * Rnd) + 3
Selection.Value = Selection.Value & Cells(行, 列).Value
Next
End Sub
-----------------------------------------------------------------------
    • good
    • 0

「改行」を何かのルールとはどんな事ですか?



①「。」の後改行する。
② 事前に文字数を決めて改行する。
③ その他
この回答への補足あり
    • good
    • 0

念の為確認ですが


・3行目を見れば列数は判りますか?
この回答への補足あり
    • good
    • 0

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