• 締切済み

エクセルで256通りの組み合わせ

たとえば、A,B,C,Dという箱にそれぞれ1~4の数字を入れると 1111 1112 1113 ・ ・ ・ 4444 と全部で256通りの組み合わせができると思います。 このようにいくつもの値の組み合わせをエクセルで全て作製するにはどのようにしたらよいのでしょうか。 実際には、Aに(10,20,30,40)、Bに(0.5,1.0,1.5,2.0)、Cに(500,600,700,800)、Dに(1.1,1.2,1.3,1.4)という感じの値の組み合わせを全通り作りたいです。 簡単なことかもしれませんが、あまり詳しくないので困っています。 よろしくお願いいたします。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です! 何度もごめんなさい。 前回の回答はまったくの的外れでした! 無視してください。 今一度考えてみます。 どうも失礼しました。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! 参考になるかどうか分かりませんが・・・ 結論としてA~D列は必ず 1~4のいずれかの値が入るということで そのすべての組合せを表示させれば良いのですね? そういう事だと解釈させていただいての回答です。 かなり強引なやり方になりますが ↓の画像の A1セル =IF(ROW()>256,"",IF(MOD(INT(ROW(A64)/64),4)=0,4,MOD(INT(ROW(A64)/64),4))) B1セル =IF(A1="","",IF(MOD(INT(ROW(A16)/16),4)=0,4,MOD(INT(ROW(A16)/16),4))) C1セル =IF(B1="","",IF(MOD(INT(ROW(A4)/4),4)=0,4,MOD(INT(ROW(A4)/4),4))) D1セル =IF(C1="","",IF(MOD(ROW(A1),4)=0,4,MOD(ROW(A1),4))) という数式を入れて、オートフィルで下へずいずぃ~~~!とコピーします これで多分すべての組合せが表示されると思います。 ただし、今回の場合のみ有効で 例えば列が増えるとか、4を超える数値があったりすると 当然数式は変わってきます。 以上、参考になれば幸いですが、 的外れなら読み流してくださいね。m(__)m

回答No.3

こういうことかなあ A1セルに =INDEX(F$1:F$4,MOD(INT((ROW(A1)-1)/4^(4-COLUMN(A1))),4)+1) 右へ、下へオートフィル

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

この手の問題は標準関数より VBA による解決の方が手っ取り早いです。 For ループのネストですね。 Sub SampleProc1()   Dim nRow As Long   Dim n1  As Variant, n2 As Variant   Dim n3  As Variant, n4 As Variant   nRow = 1   For Each n1 In Array(10, 20, 30, 40)     For Each n2 In Array(0.5, 1#, 1.5, 2#)       For Each n3 In Array(500, 600, 700, 800)         For Each n4 In Array(1.1, 1.2, 1.3, 1.4)           Cells(nRow, 1).Value = n1           Cells(nRow, 2).Value = n2           Cells(nRow, 3).Value = n3           Cells(nRow, 4).Value = n4           nRow = nRow + 1         Next       Next     Next   Next End Sub これが基本形。 加えて、#1 ご紹介の考え方を利用し、添付図のようにデータを入力したと すれば、下記のソースを試しに確認してみて。 自信はあまりないんだけどね(。-´ェ`-) Sub SampleProc2()     Dim sh     As Worksheet   Dim rSrcData  As Range   Dim nRowsCount As Long, nColsCount As Long   Dim x     As Long, y     As Long   Dim i     As Long, n     As Long   ' データ範囲の問い合わせ   On Error Resume Next   Set rSrcData = Application.InputBox("データ範囲を選択", Type:=8)   On Error GoTo 0   If rSrcData Is Nothing Then Exit Sub      ' データ件数を調べる   With rSrcData     nRowsCount = .Rows.Count     nColsCount = .Columns.Count   End With   If nRowsCount ^ nColsCount > 65536 Then ' Excel2003 max row num     MsgBox "データ数が多すぎます", vbCritical     Exit Sub   End If      ' 列挙開始   Set sh = Worksheets.Add   Application.ScreenUpdating = False   x = 1   For i = 0 To nRowsCount ^ nColsCount - 1     y = nColsCount     n = i     While y > 0       sh.Cells(x, y).Value = rSrcData.Cells(1, y). _                   Offset(n Mod nRowsCount).Value       n = n \ nRowsCount       y = y - 1     Wend     x = x + 1   Next i End Sub

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

具体的にどうしたいのかイメージがわかないのですがアドバイス 1)1つずつ入力する 2)変化するパターンを読んで、パターンをコピーして必要なだけ連続して貼り付ける 3)割り算とINT関数の組み合わせや MOD関数で各桁の数字を計算させる 好きな方法を選びましょう 3は0~3333まで増加する4進数と見なすと良いかもしれませんが、 4進数の意味が分からないなら忘れてください アドバイスにもなりませんから(汗 (0~3333に1111を加えればOK) ※ 最終的なイメージを質問から読み取れませんので、具体的な関数の使い方は   省略させていただきます んー…あと、Excelは 2007でしょうか? 2003までは65536行までしか入力できませんから、それ以上の組み合わせがある場合は シートを跨ぐことになります 2007なら、それ以上の行を入力できますから大丈夫でしょう

関連するQ&A