Excel2013で、特定の組み合わせが何個あるかを数える、もしくはどの組み合わせが一番多く登場しているのかを知る方法を教えてください。
例えば、
①みかん/りんご/なし/もも
②りんご/なし/みかん/いちご
③いちご/もも/ぶどう/みかん
④なし/りんご/みかん/ぶどう
…と続いていくとします。
この場合、2つの組み合わせでは①②③にみかんとなしのペアが3回現れており、一番多いです。
3つの組み合わせでは、①②④にみかんとりんごとなしが3回現れており、一番多いです。
なるべく分かりやすくするため果物にしましたが、実際は1~30の数字から10個入ります。
つまり、
第1回/2/3/7/11/15/18/19/21/24/26(この中で数字の重複無し。スラッシュでセル変えてます)
第2回/1/2/4/6/9/10/14/18/21/29
…
第200回/4/8/11/12/16/20/21/23/27/30と言った感じです。
第1回~第200回の中で、
(三つの数字)1,2,3の組み合わせ=〇個あった、1,2,4の組み合わせ=〇個あった……28,29,30の組み合わせ=〇個あった。
(四つの数字)1,2,3,4の組み合わせ=〇個、…27,28,29,30の組み合わせ=〇個。
(五つの数字)1,2,3,4,5の…
(六つ)1,2,3,4,5,6の…
(七つ)1,2,3,4,5,6,7の…
といった個数の部分が出せる方法を知りたいです。
いろいろ検索してみた中で、より近い質問をしていた方への答えに、「ピボットテーブルを使った方がいい、あとは自分で」と書いてあったのですが、結局訳が分からずここに質問してきています。
できる組み合わせ自体は万どころではないかなりの数になるので、どういう組み合わせがあるのかを書き出し、そこから数を数えるのは面倒です。
なるべく少ない手数で出せる方法はありませんか?
どうしても組み合わせ数が出ないのでしたら、数字が三つ、四つ、…、七つの7パターンにおいて、どの組み合わせがそれぞれのパターンで一番頻繁に登場しているのかを知りたいです。
大変複雑なことかとは思いますが、超初心者ですので、なるべく分かりやすく、もしくはこれをそのままコピペすれば大丈夫、もしくは実際の画像といった形でのお答えをお待ちしています。
No.3ベストアンサー
- 回答日時:
No.1です。
二つの関数を作成してみました。
1-1. generateCombination(e, maxNum)
1~maxNumまでの数字の内,e個の数字からなる組み合わせの最初のものを配列で返す。
1-2. generateCombination()
関数を呼ぶ毎に次の組み合わせの配列を返す。
全ての組み合わせを返した後はFalseを返す。
なので終了判定はIsArray関数で行ってください(下のtestプロシージャを参照)
2. containsCombination(rng, combination)
セル範囲の中に、combinationの組み合わせがあればTrueを返す
combinationは1の関数の戻り値です。
使い方はtestプロシージャの内容も参考にしてください。
あとは、各行のセルと組み合わせを関数containsCombinationに与えてTrueが返った数を数えれば求める結果が得られます。
出力の仕様が不明なので書きませんでしたが、簡単なプログラムなので頑張ってみてください。
Sub test()
Dim combination As Variant
Dim retMsg As Long
' 1~5の数字のうち、2個の数字からなる最初の組み合わせの配列を取得。最初の戻り値は(1,2)
combination = generateCombination(2, 5)
' 上記の組み合わせを全て取得するまでループ。戻り値:(1,2),(1,3),(1,4),(1,5),(2.3)……(4,5)
Do While IsArray(combination)
' セルA1:E1の範囲で、取得した組み合わせがあるか確認
If containsCombination(Range("A1:E1"), combination) Then
retMsg = MsgBox(Join(combination, ",") & "は含まれます。" & vbNewLine & "終了しますか?", vbYesNo)
Else
retMsg = MsgBox(Join(combination, ",") & "は含まれません。" & vbNewLine & "終了しますか?", vbYesNo)
End If
If retMsg = vbYes Then Exit Do
combination = generateCombination()
Loop
MsgBox "終了"
End Sub
Function generateCombination(Optional elm As Long = 0, Optional maxNum As Long = 30) As Variant
Static ary As Variant
Static max As Long
Dim i As Long, j As Long, limit As Long
Dim isValid As Boolean
If elm > 0 Then
max = maxNum
ReDim ary(elm - 1)
For i = 0 To elm - 1
ary(i) = i + 1
Next
isValid = True
Else
isValid = False
For i = UBound(ary) To 0 Step -1
If i = UBound(ary) Then
limit = max
Else
limit = ary(i + 1) - 1
End If
If ary(i) < limit Then
ary(i) = ary(i) + 1
For j = i + 1 To UBound(ary)
ary(j) = ary(j - 1) + 1
Next
isValid = True
Exit For
End If
Next
End If
If isValid Then
generateCombination = ary
Else
Set ary = Nothing
generateCombination = False
End If
End Function
Function containsCombination(rng As Range, combination As Variant) As Boolean
Dim cIdx As Long, dIdx As Long, b_dIdx As Long
Dim ret As Boolean
b_dIdx = 0
For cIdx = 0 To UBound(combination)
ret = False
If b_dIdx = rng.Cells.Count Then Exit For
For dIdx = b_dIdx + 1 To rng.Cells.Count
If combination(cIdx) = rng.Cells(dIdx).Value Then
ret = True
Exit For
End If
Next
If ret = False Then Exit For
b_dIdx = dIdx
Next
containsCombination = ret
End Function
No.2
- 回答日時:
直接の回答ではありませんが、もしかしたら、これは、ロト6あたりではないでしょうか。
時々、同じような質問が出てきますので、そう思いました。以前、Microsoft Office の宣伝で、家族全員が利用する中に、Excel でロト6の統計を取るという内容がありました。>近い質問をしていた方への答えに、「ピボットテーブルを使った方がいい、あとは自分で」
そう言っている人はいます。いろんな人がいろんなノウハウを持っていたりしますが、実際の公開はしないのがほとんどです。しかし、逆に結果論としての成果を上げているというのだから、すごいなって思います。私は、掲示板で質問が出た時に、自分なりに考えたり調べたりしましたが、難しい計算をしている人もいました。
もし、勘違いでしたら、無視してください。
以下は、ミニロトです。かなり古いものですが、約2年のデータををグラフにしたものを、頻度順にカテゴリ分けしました。
No.1
- 回答日時:
二種類の例が却って分かりにくいです。
10個一組の数字は、小さい順にソートされているのでしょうか?
ソートされていない場合、例えば1/2 と 2/1 は同じ組み合わせなのか否か、どちらですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 無理数の数字の組み合わせ。無限の意味について 5 2022/05/28 22:53
- 数学 これって正しいんじゃないの? 「無理数を小数で表現すると、小数点以下に数字が無限に続きますが、それら 5 2022/05/29 23:56
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
- 小学校 約数の調べ方。 小学生の子供に分かりやすいように説明したいです。 例えば素因数分解するとします。2が 4 2022/08/24 15:14
- 分譲マンション 総会前にきて、管理会社のフロントマンに振り回され役員一同が困っています。 5 2023/05/15 03:12
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
- Excel(エクセル) 図書カードの分配 7 2023/05/09 15:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字3桁全ての組み合わせ教え...
-
6人を3つの部屋ABCに入れる方法...
-
6人を3人一組の組み合わせは...
-
数Aです。 X+Y+Z=10を満たす、...
-
クイズです
-
4桁の数字,3桁の数字で,人...
-
項の個数の出し方
-
最大公約数が4になる2つの数...
-
当番表を作りたい
-
4桁の数字を足して29になる組み...
-
4桁の数字で、合計が24になる組...
-
高校数学A 場合の数 特定の二人...
-
3連複フォーメーション
-
なぜ、黒鍵すべてを使う長音階...
-
同じものを含む順列について
-
なんで 1番から7番までの7枚の...
-
エクセルでnCr (組み合わせ)...
-
素数
-
120分の1の確率。何回くら...
-
数学問題です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字3桁全ての組み合わせ教え...
-
6人を3つの部屋ABCに入れる方法...
-
6人を3人一組の組み合わせは...
-
数Aです。 X+Y+Z=10を満たす、...
-
最大公約数が4になる2つの数...
-
当番表を作りたい
-
4桁の数字,3桁の数字で,人...
-
なんで 1番から7番までの7枚の...
-
個数の処理で・・・。
-
1~4の数字を3桁で表す場合...
-
項の個数の出し方
-
6つの数字の組み合わせ(求:答...
-
高校数学A 場合の数 特定の二人...
-
8人を4人の2グループに分ける
-
3連複フォーメーション
-
1円、3円、5円…と奇数の額面の...
-
クイズです
-
なぜ、黒鍵すべてを使う長音階...
-
確率などの問題で組み合わせを...
-
素数
おすすめ情報
すみません!分かりづらかったですね。
必ず小さい順です。