[過去ログ] Excel VBA 質問スレ Part39 [転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
506
(2): デフォルトの名無しさん [sage] 2016/01/21(木) 01:06:23.00 ID:X7n9A0oT(1/3) AAS
>>505
505(3): デフォルトの名無しさん [sage] 2016/01/21(木) 00:52:36.55 ID:rehOk3U9(1) AAS
10行×5列の表があって、1列目に5個、2列目に8個、3列目に5個、4列目と5列目は空欄となっています。各項目は必ず1行目から入っています。
各列から1つずつ取って、それらを左から繋げた文字列(順列)を作りたいのですが、どのように書けば良いのでしょうか。
各列に何個要素があるかをカウントするところまでは書けたのですが、そこからよくわからなくなってしまいました
こんな感じか?

Sub macro1()
  r = 1
  For r1 = 1 To 5
    For r2 = 1 To 8
      For r3 = 1 To 5
        s = Cells(r1, 1) & Cells(r2, 2) & Cells(r3, 3)
        Cells(r, 6) = s
        r = r + 1
      Next
    Next
  Next
End Sub
516
(1): デフォルトの名無しさん [sage] 2016/01/21(木) 12:06:31.84 ID:X7n9A0oT(2/3) AAS
>>515
515(2): デフォルトの名無しさん [sage] 2016/01/21(木) 12:00:32.16 ID:tGM9G3/P(2/2) AAS
>>509
ありがとうございます。
条件を書くと、以下のようです。

1)各列に何個の要素があるかは動的(
2)何列あるかも動的(>>506のネストの数は3だが、ここが何回ネストするかが動的になる)
3)組み合わせの仕方は左から順にのみで、並び替えの必要はない(樹形図的)
4)要素の文字数も動的で、何桁か決まってはいないし、数字もあれば文字列もある

私は条件2のうまい書き方がよくわからず、結局、何列あるかを調べて、if文で1列なら〜2列なら〜3列なら>>506というようにしています。
そういう場合は再帰を使え
520
(4): デフォルトの名無しさん [sage] 2016/01/21(木) 13:30:20.23 ID:X7n9A0oT(3/3) AAS
>>515
再帰ってのはこんなふうに書くんだよ
ループのネストの段数が不定でも問題なく動く
VBAの仕様でデータが300列ぐらいあるとメモリ不足を起こすけど、300列の順列なんて出そうとしたら人類が滅亡するほど時間がかかるんで実用上は問題ない

Sub main()
  Call Recursive(1, "")
End Sub

Sub Recursive(c As Long, s As String)
  max_row = Cells(Rows.Count, c).End(xlUp).Row
  If Cells(max_row, c).Value <> "" Then
    For r = 1 To max_row
      Call Recursive(c + 1, s & Cells(r, c))
    Next
  Else
    Debug.Print s  ' データ出力
  End If
End Sub
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.204s*