- 締切済み
エクセルで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)という感じの値の組み合わせを全通り作りたいです。 簡単なことかもしれませんが、あまり詳しくないので困っています。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.4です! 何度もごめんなさい。 前回の回答はまったくの的外れでした! 無視してください。 今一度考えてみます。 どうも失礼しました。m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか分かりませんが・・・ 結論として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
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- KenKen_SP
- ベストアンサー率62% (785/1258)
この手の問題は標準関数より 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)
具体的にどうしたいのかイメージがわかないのですがアドバイス 1)1つずつ入力する 2)変化するパターンを読んで、パターンをコピーして必要なだけ連続して貼り付ける 3)割り算とINT関数の組み合わせや MOD関数で各桁の数字を計算させる 好きな方法を選びましょう 3は0~3333まで増加する4進数と見なすと良いかもしれませんが、 4進数の意味が分からないなら忘れてください アドバイスにもなりませんから(汗 (0~3333に1111を加えればOK) ※ 最終的なイメージを質問から読み取れませんので、具体的な関数の使い方は 省略させていただきます んー…あと、Excelは 2007でしょうか? 2003までは65536行までしか入力できませんから、それ以上の組み合わせがある場合は シートを跨ぐことになります 2007なら、それ以上の行を入力できますから大丈夫でしょう