• ベストアンサー

順列の組み合わせを表示させる方法

B~Cの3列のそれぞれの2つの数字からできる順列の組み合わせを図のように表示させる方法をご教示願います。

質問者が選んだベストアンサー

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

No.3です。 列数は必ず3列というコトですので、前回の方法で大丈夫のはずです。 ただ、この操作を何度も行うのであれば、表示されているデータを一旦削除する必要がありますね。 >3行目が数字の桁数だと思いますが、 とは >cnt = 2 のコトでしょうか? これは桁数ではありません。何行目から表示するか?という基準の行数ですので、 あらかじめ「2」(2行目)を指定してやり For~Nextでループするたびに >cnt = cnt + 1 のように1行ずつプラスしていますので、結局3行目以降、順番に表示しているだけです。 ↓のコードに変えてマクロを実行してみてください。 ※ データを入れるセルは 必ずB2~D2セルとします。 Sub Sample2() 'この行から Dim i As Long, j As Long, k As Long, cnt As Long, endRow As Long endRow = Cells(Rows.Count, "B").End(xlUp).Row If endRow > 2 Then Range(Cells(3, "B"), Cells(endRow, "D")).ClearContents End If cnt = 2 For i = 1 To Len(Cells(2, "B")) For j = 1 To Len(Cells(2, "C")) For k = 1 To Len(Cells(2, "D")) cnt = cnt + 1 With Cells(cnt, "B") .Value = Mid(Cells(2, "B"), i, 1) .Offset(, 1) = Mid(Cells(2, "C"), j, 1) .Offset(, 2) = Mid(Cells(2, "D"), k, 1) End With Next k Next j Next i End Sub 'この行まで ※ B2~D2セルには何桁でも良いので、何らかのデータを入力してください。 空白セルがあると全く反応しません。m(_ _)m

KIKAIDER01
質問者

補足

ありがとうございます。バッチリいけました。 k、j、iはアルファベットであれば、なんでもいいのでしょうか?

その他の回答 (6)

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

No.3・5です。 返信が遅くなってごめんなさい。 >k、j、iはアルファベットであれば、なんでもいいのでしょうか? に関して・・・ ご自身で変数の宣言をすれば アルファベットでも日本語でもなんでも構いません。 >Dim i As Long, j As Long, k As Long, の部分は >Dim B列 As Long, C列 As Long, D列 As Long のように好みで宣言してみてください。 ただ、あまりに長い変数にしてしまうと、前回のコードでは i → B列 j → C列 k → D列 とコード内すべてで間違えないように入力しなければならないので、 個人的には簡単なアルファベットにしているだけです。 ※ 注意点 ※  使用するアルファベットに関してですが、m(月) d(日) 等々Excelでは他に使用しているアルファベットは 極力使用しない方が良いと思います。m(_ _)m

KIKAIDER01
質問者

お礼

ありがとうございます。 お礼が遅くなってごめんなさい。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

>2行目の「17」「69」「45」というのがあり、B3~D10に順列のパターン(164、165、194、195、764、765、794、795)を表示させる方法というのが質問の趣旨でした。 逆でしたか。 B2、C2、D2の値をB3:D10へ1桁ずつ配置する処理ですね。 元のデータは2桁の3組ですから2^3=8となり8つのパターンがあります。 B3=IF(ROW()-3<(2^3)/2,IF(ROW()-2<=2^3,VALUE(MID(B$2,1,1)),""),IF(ROW()-2<=2^3,VALUE(MID(B$2,2,1)),"")) C3=IF(MOD(ROW()-3,4)<(2^3)/4,IF(ROW()-2<=2^3,VALUE(MID(C$2,1,1)),""),IF(ROW()-2<=2^3,VALUE(MID(C$2,2,1)),"")) D3=IF(MOD(ROW()-2,2)=1,IF(ROW()-2<=2^3,VALUE(MID(D$2,1,1)),""),IF(ROW()-2<=2^3,VALUE(MID(D$2,2,1)),"")) 上記3つの関数をセットして、下へオートフィルでコピーすれば完成です。 手違いで11行目以降へコピーしても結果は空欄になります。 元データの上桁が下桁より大きいときは期待通りの結果になりませんのでB列を優先順位1位、B列を2位、C列を3位として昇順ソートすれば目的通りになります。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

B3:D10に提示添付画像の通りに値が入力されていることを前提にすれば以下の方法でB2からD2へ目的通りの値を算出できます。 1、B2へ次の式を入力する。  =VALUE(IF(COUNTIF(B3:B10,1),"1","")&IF(COUNTIF(B3:B10,2),"2","")&IF(COUNTIF(B3:B10,3),"3","")&IF(COUNTIF(B3:B10,4),"4","")&IF(COUNTIF(B3:B10,5),"5","")&IF(COUNTIF(B3:B10,6),"6","")&IF(COUNTIF(B3:B10,7),"7","")&IF(COUNTIF(B3:B10,8),"8","")&IF(COUNTIF(B3:B10,9),"9","")) 2.B2セルをC2とD2にコピーする。 COUNTIF関数で検出された値を文字化して連結しました。 出来上がった文字列をVALUE関数で数値化しています。 B2からD2までの値が文字列で良ければVALUE関数を省いて運用してください。 文字列連結は&演算子以外にCONCATENATE関数を使うこともできます。

KIKAIDER01
質問者

補足

すいません、説明不足でした。2行目の「17」「69」「45」というのがあり、B3~D10に順列のパターン(164、165、194、195、764、765、794、795)を表示させる方法というのが質問の趣旨でした。

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

こんにちは! No.2さんと同じ疑問を持ちつつ・・・ 質問の画像通りの3列配置とします。 VBAになってしまいますが、一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, k As Long, cnt As Long cnt = 2 For i = 1 To Len(Cells(2, "B")) For j = 1 To Len(Cells(2, "C")) For k = 1 To Len(Cells(2, "D")) cnt = cnt + 1 With Cells(cnt, "B") .Value = Mid(Cells(2, "B"), i, 1) .Offset(, 1) = Mid(Cells(2, "C"), j, 1) .Offset(, 2) = Mid(Cells(2, "D"), k, 1) End With Next k Next j Next i End Sub 'この行まで ※ 2行目の桁数は1桁以上であれば何桁でも対応できます。 ※ 列数が増える場合は変数を増やせば対応可能です。 こんなんではどうでしょうか?m(_ _)m

KIKAIDER01
質問者

補足

3行目が数字の桁数だと思いますが、No.2さんが書かれているように桁数は増える可能性があります(列数は増えません)。しかも、B~D列の桁数がまちまちになることもありますので、桁数を自動認識するようにはできないでしょうか。お手間を取らせますが、引き続きご教示お願い致します。

noname#204879
noname#204879
回答No.2

後になって、「3つの数字」の場合とか、「B~Dの4列」の場合とか、言い出しませんか?

回答No.1

B3 =0+mid(B$2,1+mod(int((rows(B$3:B3)-1)/2^(3-columns($B3:B3))),2),1) B3 セルをコピー、B3:D10 のセル範囲に貼り付け

関連するQ&A

  • 組み合わせでも順列でも解ける(?)問題

    赤シール2枚、青シール3枚、白シール2枚を添付図のような場所に1枚ずつ張るとき、全部で何通りの貼り方ができるか? 順列で解くと 7!/(2!3!2!) ですよね 組み合わせの 7C2・5C3・2C2 でも答えが出てくるのですが、単なる偶然ですか? たしか、組み合わせと順列のどちらでも解ける問題があったような気が・・・

  • 順列と組み合わせ

     高校1年です。数学Aで教えてほしいことがあります。  数Aの「順列と組み合わせ」という単元があり、そこでは、!(階乗)P(順列)C(組み合わせ)、円順列、じゅず順列、重複順列 等など、いろいろな公式(単語)?が出てきました。 それらの公式は、とりあえず教科書を読んで覚えました。  しかしいざ問題演習になると、どの公式を使えばいいのかがわかりません。  『こんな問題にはこの公式を使う』という見分け方をどなたか教えてください。

  • 「順列」と「組み合わせ」問題の違い

    「順列」と「組み合わせ」の意味がまったく理解できません、よろしくお願いします。 ・ある符号「A、B、C、D、E」から3個の符号の並べ方をもとめるのは、「順列」の問題。 ・ある符号「A、B、C、D、E」から3個の符号の組み合わせの数を求めるのは「組み合せ」の問題といわれました。 両者の違いがよく判りません、上の問題はどこがいったい違うのでしょうか。 「順列」と「組み合わせ」の意味が理解できませんよろしくお願いいたします。

  • 順列と組み合わせ

    順列と組み合わせの初歩だと思うのですが、恥ずかしながら教えてください。 14人の集団からグループA、グループBに各々4人づつを選ぶ組み合わせです。 14!÷4!÷4!=151,351,200 と計算したのですが、本当にこんなにあるのでしょうか? 宜しくお願いいたします。

  • エクセルVBA 条件付整数組合わせ表示方法

    整数の組み合わせを表示する方法をおしえてください。 1~6の整数をつかって A<B<C かつ D<E<F となるような数字の組み合わせを A列 B列 C列 D列 E列 F列 1 2 3 4 5 6 1 2 4 3 5 6 ・ ・ ・ となるように順番に表示していくには どうすればよいのでしょうか?

  • 順列と組み合わせについて

    1、リンゴ5つを三人で分けたとき何通りの分け方があるか、ただし一つももらわない 人がいてもよいとする。 2、5人のをA,B,Cの三部屋に分けるとき何通りの分け方があるか、ただし空き部屋があってもよいとする 1と2の違いについて教えてください、後不定方程式の解の個数と重複順列と重複組み合わせの関係について教えてください。 よろしくお願いします

  • 組合せVBA

    環境はExcel2002です A列に連番数字1から100が入力されていて B列の100行には数字のデータがあるとします ある目的の数値Xに一番近くなるB列の組合せをC列に表示したいのです…VBAで B列に表示するのはA列の連番です 『一番近くなる』の意味は2通りあって、両方の算出方法をご教示願います (1)目的の数値Xを絶対超えないで目的の数値Xに一番近くなる組合せ (2)目的の数値Xを必ず超えて目的の数値Xに一番近くなる組合せ

  • 確率で組み合わせと順列の考え方について

    1から9までの中から無造作に3種類の数字を選び、 3桁の数を作るとき、その数が3の倍数である確率を求めよ。 という問題で、答えでは組み合わせと順列どの考え方でも解けるそうですが、 組み合わせの解法しか載っていません。順列での解法を教えて下さい。 というかそもそも、組み合わせの解法はどの様な考え方なのでしょうか? 答えは3の倍数を作るために1-9の数を369.158.247でグループ分けをしてましたが、 組み合わせの考えだと区別しないんですよね?それってグループ内を区別してないのか、全ての数字を区別していないのか、よく分かりません。。。 よろしくお願いします。

  • 確率を求める時、組合せか順列どちらを使うか

    確率の計算で、組合せを用いた計算がわからないので質問します。 問題は、「それぞれ1から5までの数字が書かれた5枚のカードがある。このカードを1回目に引いたカードを戻さずに、続けて2回引く、1回目に引いたカードの数字をa,2回目に引いたカードの数字をbとする。a≦3かつa+bが偶数になる確率を求めよ。」です。 自分は(1)a=1のときはbは3か5のように考えて(1/5)*(2/4)=2/20、(2)a=2のときはbは4より(1/5)*(1/4)=1/20、(3)a=3のときはbは1か5(1/5)*(2/4)=2/20、(1)から(3)を足して5/20=1/4と考えました。これは不正解で、 本では、すべての数の組み合わせの総数は5C2=10そのうち、a=1のときはbは3,5で2通り、a=3のときも2通り、a=2のときはbは4の1通りよって確率は(2+2+1)/10=1/2が答えのようです。本の考え方が正しいとすると、例えばa=1のときの順列で考えた自分の計算は、20通りあるうち4通りが問題文の条件を満たすはずなのですが、分かりません。 どなたか本の考えかたでなぜ正しいかを教えてください、また自分の順列を用いた考えでの間違いを指摘していただきたいです、お願いします。

  • 順列組み合わせ

    A,B,Cの三文字を4桁で並べる場合の順列組み合わせを知りたくここで質問させていただきます。 AAAAから始まりCCCCまで。 文字の重複 AABC(Aが重複) 文字の未使用 AAAB(Cが未使用) もありです。 当方、学生時代は遥か昔なので、数学は完全に忘れております、、、 よろしくお願いいたします。

専門家に質問してみよう