• ベストアンサー

EXCELVBA 全通りの組み合わせの出力

はじめまして! VBAの記述の方法が分からず困っています。 過去の質問も検索してみましたが、自分のケースにどうあてはめればよいかわからず・・。 どなたが教えていただけないでしょうか? A1~AK1までそれぞれ1~37までの数字が入力されています。 組み合わせとして、そこから35個の数字を選ぶ場合の全通りを記載したいです。 2行目のA1~AI1までに選んだ35個の数字を出力し、 1行ずつ下にずらしていきたいです。 大変お手数ですが・・・よろしくお願いします・・・

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

  • ベストアンサー
  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

えっとどこまでは出来ているのでしょうか。 まず全体の組み立てを考えてみてはどうでしょう。 わたしは原始的ですが以下のように考えてみました。 ・37個の数値のうち、35個を選ぶ → どれか2つを取り除く ・その取り除く2つの組み合わせを全部記載する ・=COMBIN(37,35)で見てみると、666通り。 それでは、2行目以下に666通りを記載してみよう。 というわけで、 空白シートで以下。 Sub aaaaa() Dim r As Integer, c As Integer Dim p As Integer, q As Integer ActiveWindow.Zoom = 70 Range(Columns(1), Columns(41)).ColumnWidth = 4 For r = 1 To 667 For c = 1 To 37 Cells(r, c).Value = c Next c Next r r = 2 For p = 1 To 37 For q = p + 1 To 37 Cells(r, 40).Value = p Cells(r, 41).Value = q r = r + 1 Next q Next p For r = 2 To 667 Cells(r, Cells(r, 40)).ClearContents Cells(r, Cells(r, 41)).ClearContents Next r Application.ScreenUpdating = False For r = 667 To 2 Step -1 For c = 37 To 1 Step -1 If Cells(r, c).Value = "" Then Cells(r, c).Delete shift:=xlToLeft End If Next c Next r End Sub 一番上には1~37を示し、2行目以降は全組み合わせを記載しました。 AL、AM列には取り除いた2つの値を記載しています。 ご確認ください。

noname#229057
質問者

お礼

ありがとうございますm(_ _)m とてもわかりやすい記述で、とても勉強になりました! 私の努力が足りないようなので、もっともっと精進します!

すると、全ての回答が全文表示されます。

関連するQ&A