プロが教えるわが家の防犯対策術!

たとえば、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)という感じの値の組み合わせを全通り作りたいです。

簡単なことかもしれませんが、あまり詳しくないので困っています。
よろしくお願いいたします。

A 回答 (5件)

No.4です!


何度もごめんなさい。

前回の回答はまったくの的外れでした!
無視してください。

今一度考えてみます。

どうも失礼しました。m(__)m
    • good
    • 0

こんばんは!


参考になるかどうか分かりませんが・・・

結論として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
「エクセルで256通りの組み合わせ」の回答画像4
    • good
    • 0

こういうことかなあ


A1セルに
=INDEX(F$1:F$4,MOD(INT((ROW(A1)-1)/4^(4-COLUMN(A1))),4)+1)
右へ、下へオートフィル
「エクセルで256通りの組み合わせ」の回答画像3
    • good
    • 0

この手の問題は標準関数より 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
「エクセルで256通りの組み合わせ」の回答画像2
    • good
    • 0

具体的にどうしたいのかイメージがわかないのですがアドバイス



1)1つずつ入力する
2)変化するパターンを読んで、パターンをコピーして必要なだけ連続して貼り付ける
3)割り算とINT関数の組み合わせや MOD関数で各桁の数字を計算させる

好きな方法を選びましょう
3は0~3333まで増加する4進数と見なすと良いかもしれませんが、
4進数の意味が分からないなら忘れてください
アドバイスにもなりませんから(汗
(0~3333に1111を加えればOK)
※ 最終的なイメージを質問から読み取れませんので、具体的な関数の使い方は
  省略させていただきます

んー…あと、Excelは 2007でしょうか?
2003までは65536行までしか入力できませんから、それ以上の組み合わせがある場合は
シートを跨ぐことになります
2007なら、それ以上の行を入力できますから大丈夫でしょう
    • good
    • 0

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