ExcelでNダイスの可能な組み合わせのリストを生成する方法


1

私は2、3、4、5、6などの可能な組み合わせを挙げたいです。

例えば:

2個のサイコロの場合、セルA1は11(1& 1)です。セルを下にドラッグして、次の2つのダイス値を自動的に追加します。

12
13
14
15
16
22
23
24
...
55
56
66

(合計21の組み合わせ)

N個のダイスの値をすべてリストするには、最小値から始めます(N = 3:1,1,1の場合)。最初のセルをドラッグし、次の数字が次のサイコロの組み合わせとして表示されるようにしたかっただけです。つまり、Excelでは10ではなくBASE 6を使用して増分し、すでに別の順序で表示されている組み合わせは除外します。結果の値を文字列として保持したいです。したがって、数字の1つ(4ダイス)が1126になる場合、次の数字は1133であり、1127ではありません。

これは2、3、4、5、6個のダイスに対して達成可能か?


何をしようとしているのか、または数字が何を表しているのかは明確ではありません(11はどこから来ていますか?追加したい範囲のソースは何ですか?)
fixer1234

申し訳ありませんが、11は2つのサイコロの組み合わせの最小合計です。
SKYTTEN

回答:


1

これはおそらくVBAの方が簡単でしょうが、式を使って行うことができます。私はLibreOffice Calcで作業しています。これは数式あたりの最大文字数が少ないため、ヘルパー列を使用する必要がありました。ただし、必要に応じてこれを単一の式にまとめることができます。私はこれを最大6個のサイコロのまわりに作りました、しかしあなたがヘルパーコラムのパターンに従うならば、あなたはそれをあなたが望むだけ多くに拡張することができます。

screenshot

セルA1はあなたの開始番号が行くところです。通常、それは 1 各ダイのために。私は始めました 123456 ロジックを説明します。列CからHは、最大6個のサイコロそれぞれに1つずつあるヘルパー列です。これらのセルはそれぞれの次の値を見つけ出します。列Aは、値を単一のストリングに連結します。 2行目の数式を入力してから、必要な数だけ事前入力するためにその行をコピーします(不要なセルは空白になり、必要に応じてC:H列を非表示にできます)。

A2の式:

=IF(A1="","",C2&D2&E2&F2&G2&H2)

空白のテストは不要なセルを隠すものです。すべてを単一の式に変換したい場合は、C2:H2の式を参照に置き換えてください。

C2:H2の式は次のとおりです。

C2:  =                IF(VALUE(LEFT(A1,1))=6,"", VALUE(LEFT(A1,1)) +          OR(VALUE(MID(A1,2,1))=6))
D2:  =                IF(VALUE(MID(A1,2,1))=6,C2,VALUE(MID(A1,2,1))+IF(LEN(A1)>2,VALUE(MID(A1,3,1))=6,1))
E2:  =IF(LEN(A1)<3,"",IF(VALUE(MID(A1,3,1))=6,D2,VALUE(MID(A1,3,1))+IF(LEN(A1)>3,VALUE(MID(A1,4,1))=6,1)))
F2:  =IF(LEN(A1)<4,"",IF(VALUE(MID(A1,4,1))=6,E2,VALUE(MID(A1,4,1))+IF(LEN(A1)>4,VALUE(MID(A1,5,1))=6,1)))
G2:  =IF(LEN(A1)<5,"",IF(VALUE(MID(A1,5,1))=6,F2,VALUE(MID(A1,5,1))+IF(LEN(A1)>5,VALUE(MID(A1,6,1))=6,1)))
H2:  =IF(LEN(A1)<6,"",IF(VALUE(MID(A1,6,1))=6,G2,VALUE(MID(A1,6,1))+1))

ロジックを見やすくするために、数式パターンを揃えるためのスペースを追加しました。あなたはこれらを削除することができます。あなたは最低2つのダイスを持っているので、最初の2つの式はそれらが存在するかどうかをテストする必要はありません。最初のダイが到達したとき 6他のすべての人は 6だから、それは最後の行です。 C2のOR関数は、LO Calcがブール式の評価に失敗したためです。 ORはそれを強制します(そして何も傷つけません)。最後の潜在的なダイスは次のダイスから値をキャリーオーバーする必要がないので、その式は少し短くなります。

列DからHには、前の列への参照が含まれています。これを単一の式にまとめる場合は、D2のC2参照をC2式に置き換えます。それから、それぞれの連続した列に対して同じことをします(あなたがこれをするにつれて式は大きくなるでしょう)。

これが2つのサイコロの出力です。

screenshot 2


これは本当に私の考えを超えていました。私の仕事にとって完璧な解決策であることがわかった。
SKYTTEN

私は同じタスクを7つのダイスに拡張しました(6つのダイス式の背後にある論理を部分的に理解するために)。私はダイス6に使用しました。 VALUE(MID(A1,6,1))= 6、G2、VALUE(MID(A1,6,1))+ IF(LEN(A1)> 6、VALUE(MID(A1,6,1))= 6,1)))。そしてサイコロ7の場合:I 2:= IF(LEN(A1)<7、””、IF(値(MID(A1,7,1))= 6、H2、値(MID(A1,7,1)) +1))しかし、うまくいきません。シートは同じサイクル111,1111から111,1116と111,1111を繰り返します。アドバイスしてもらえますか?
SKYTTEN

@ SKYTTEN:数式を見ているだけで、明らかな問題は発生しませんでした。私はちょうどあなたが私があなたの開始番号であると仮定しているものにカンマがあることに気づいた。 1111111から始まっていることを確認できますか?
fixer1234

@ SKYTTEN:あなたの式に2つの問題がありました。修正してからうまくいった。両方ともH2とあります。 1)コメントから計算式をコピーしたとき、最後のVALUEにUとEの間に奇妙な隠れた文字がありました。文字を置き換えると、そのエラーは消えました。 2)最後のMID関数では、6ではなく7になるはずなので、MID(A1,7,1)と読みます。
fixer1234

再度、感謝します。それはうまくいった。今、私は「6」がサイコロの番ではなく、各ダイの辺の番ではないことをもっと理解しました。 「奇妙な」文字が何であるかはわからないが、私はiPadのNumbersを使っていたが、数式をExcelシートにコピーしたところ、それは完璧に機能した。あなたの時間とこの貴重なレッスンを高く評価してください。
SKYTTEN

1

A1 入る:

=ROW()

コピーします。に B1 入る:

=ROW()*6

コピーします。に C1 入る:

=B1-A1+1

コピーします。

カラム C の可能な値を表します N サイコロ。

考えられる結果の数は次のとおりです。

(5 *サイコロの数)+ 1


私は、私が本当に欲しいものを本当にひどく説明したと思います。 N個のダイスのすべての値を列挙するには、最小値から始めます(N = 3の場合1,1,1)。最初のセルと次の数字をドラッグして、ダイスの次の組み合わせとして表示されるようにしたいのです。つまり、ExcelではBASEが10ではなく6であると推測し、ダイスの値を文字列として登録します。したがって、数字の1つ(4ダイス)が1126になる場合、次の数字は1133でなければならず、1127ではありません。
SKYTTEN

@ SKYTTENあなたの説明はイギリスです。 3つのサイコロの場合、最低の結果は3です。 (三蛇目) そして最高の結果は18 (3×6) したがって、結果の総数は16です。
Gary's Student

@SKYTTEN:可能な組み合わせの数だけでなく、実際の組み合わせのすべてをリストしたいと言っていますか。
fixer1234

@ fixer1234:その通りです。
SKYTTEN

@SKYTTEN申し訳ありません....................私は誤解しました
Gary's Student

0

あなたは式でこれを行うことができますが、2つ以上のサイコロのためにそれは従うことがかなり難しくなるでしょう。

これは一般的な例です、それはサイコロや他の例のために働くでしょう。 3つのテーブル(Table1 = A1:A7)、(Table2 = B1:B7)、(Table3 = C1:C7)があるとします。最初の行はヘッダーです(たとえば、dice1、dice2、およびdice3)。

空の結果になるまで(最大組み合わせ数に達するまで)数式をコピーする必要があります。

(パラメータの区切り文字として式の中で ";"を "、"に置き換える必要があるかもしれません)

2つのサイコロ(36の組み合わせ)の場合:

=IF(ROW()-ROW($F$2)+1>COUNTA(Table1)*COUNTA(Table2);"";INDEX(Table1;QUOTIENT(ROW()-ROW($F$2);COUNTA(Table2))+1)&INDEX(Table2;MOD(ROW()-ROW($F$2);COUNTA(Table2))+1))

3つのダイス(216の組み合わせ)の場合:

=IF(ROW()-ROW($F$2)+1>COUNTA(Table1)*COUNTA(Table2)*COUNTA(Table3);"";INDEX(Table1;QUOTIENT(ROW()-ROW($G$2);COUNT(Table2)*COUNT(Table3))+1))&INDEX(Table2;MOD(QUOTIENT(ROW()-ROW($G$2);COUNT(Table3))+1;COUNT(Table3))+1)&INDEX(Table3;MOD(ROW()-ROW($G$2);COUNT(Table3))+1)

それはどのように動作しますか:

  1. 現在の組み合わせ番号は次のようになります。 ROW()-ROW($F$2) + 1 F2は、最初の数式を配置するセルです。

  2. 最初のダイスの値を6行ごとに回転させます( COUNTA(Table2) とさいの目に切ると36行ごとに COUNTA(Table1)*COUNTA(Table2) 3つのサイコロで)。

  3. 2番目のサイコロの値を2つのサイコロで1行ごとに、3つのサイコロで6行ごとに回転します。

  4. 3つのサイコロを使うと、各行ごとにサイコロの値を回転させます。

代替方法は、Microsoft Query(Data / From Other Sources)です。 Aテーブルに1から6までの値を含むシートやテーブルをいくつでも作成する必要があります(テーブルの場合、「このデータソースには表示可能なテーブルが含まれていません」。 "Dice1"、 "Dice2"、 "Dice3"のようなヘッダー。 3セットのデカルト積を取得するためのクエリは次のようになります。

SELECT `Sheet1$`.Dice1 & `Sheet2$`.Dice2 & `Sheet3$`.Dice3 as  Combinations
FROM `Book1.xlsx`.`Sheet1$` `Sheet1$`, `Book1.xlsx`.`Sheet2$` `Sheet2$`, `Book1.xlsx`.`Sheet3$` `Sheet3$`

準備するのは難しくなりますが理解しやすくなります(基本的なSQLを知っている場合)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.