• 締切済み

順列組み合わせ→エクセルの達人の皆様へ

エクセルは使えるが、数学(算数)はからっきし駄目人間からの質問です。 商品が下記の通り7種類有ります(単価全部違います) AAA 単価8500円 BBB 単価6800円 CCC 単価8000円 DDD 単価5800円 EEE 単価4800円 FFF 単価9000円 GGG 単価8800円 次回キャンペーンで、下記企画を打ち出す計画があります。 条件(1)同一商品を3個買えば、同一商品又は自分の好きな他の商品を1個無料進呈 条件(2)違う商品でも兎に角3個買えば、他の商品1個を無料進呈 無料進呈は当社負担なので、例えば最悪(売り手にとって)一番安い組み合わせ(EEEを3個で無料進呈FFF)の割合が多ければ、大損します(多分)(笑)。(全体で在庫が減るという営業側面的利益は別にして)、さて、問題は (1)何種類の組み合わせがあり (2)その組み合わせの具体例 上記でシミユレーションをしてみたいと思います。Visual Basic不得意です。出来ればEXCELの関数で、どうしてもVBなら一から勉強しますが(泣)

  • mabomk
  • お礼率62% (312/503)

みんなの回答

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.6

No.4です。「(3)3ヶとも異なる商品を選ぶ 」のところの 組合せ数の記述をまちがえていました。スミマセン。 <正>7C3=7!/{(7-3)!×3!}}=(7×6×5)/(3×2)=35通り <誤>7C2=7!/{(7-2)!×2!}}=(7×6×5)/(3×2)=35通り

mabomk
質問者

お礼

皆様ご回答多謝! PC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。   皆様に追記です。 全員の方に●ポイント●差し上げたいのですが、それも出来ませんので、勘弁して下さい。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

No2 です。 慣れぬことはせぬもの。お恥ずかしい限り (^_^;) 3種類の組み合わせは84 それに、それぞれ無料進呈が7種あるので588通りですが No2さんの回答にあるとおり、 賢い消費者なら、無料進呈分も考慮して安い組み合わせを選択するでしょう その場合は210通りかな???? Sub test2() Dim j1 As Integer Dim j2 As Integer Dim j3 As Integer Dim j4 As Integer Dim k As Integer With Application   For j1 = 1 To 7     For j2 = j1 To 7       For j3 = j2 To 7         For j4 = j3 To 7 '←☆☆☆☆☆☆☆ここの j3 を 1 に変えると588通り           k = k + 1           Worksheets(2).Cells(k, 1).Value = Worksheets(1).Cells(j1, 1).Value           Worksheets(2).Cells(k, 2).Value = Worksheets(1).Cells(j1, 2).Value           Worksheets(2).Cells(k, 3).Value = Worksheets(1).Cells(j1, 3).Value                      Worksheets(2).Cells(k, 4).Value = Worksheets(1).Cells(j2, 1).Value           Worksheets(2).Cells(k, 5).Value = Worksheets(1).Cells(j2, 2).Value           Worksheets(2).Cells(k, 6).Value = Worksheets(1).Cells(j2, 3).Value                      Worksheets(2).Cells(k, 7).Value = Worksheets(1).Cells(j3, 1).Value           Worksheets(2).Cells(k, 8).Value = Worksheets(1).Cells(j3, 2).Value           Worksheets(2).Cells(k, 9).Value = Worksheets(1).Cells(j3, 3).Value                    Worksheets(2).Cells(k, 10).Value = Worksheets(1).Cells(j4, 1).Value           Worksheets(2).Cells(k, 11).Value = Worksheets(1).Cells(j4, 2).Value           Worksheets(2).Cells(k, 12).Value = Worksheets(1).Cells(j4, 3).Value         Next       Next     Next   Next End With End Sub

mabomk
質問者

お礼

皆様ご回答多謝! PC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.4

ANo3 Sige1701さんのお答えにありますように「7種類から3個を選ぶ組み合わせは84とおり」です。(無料進呈を含めた組合せは84×7=588通り) 因みに3ヶ商品を選ぶケースは、次の3つに類別できます。 (1)3ヶとも同じ商品を選ぶ → 7通り (2)2ヶが同じ商品で、残り1ヶは他の商品を選ぶ →7通り×6通り=42通り (3)3ヶとも異なる商品を選ぶ  → 7種の中から異なる3種を選ぶ組合せは、7C2=7!/{(7-2)!×2!}}=(7×6×5)/(3×2)=35通り 合計が84通りの組合せになります。 その組み合わせの具体例は、(1)・(2)・(3)について、考えながら手作業でインプットするか、(1)・(2)・(3)のロジックをVBAでやるかだろうと思います。 VBAは、勉強の楽しみを残して割愛します。 588通りの組合せの販売企画への活用ですが、同じ局面の自分を想定して見ました。 きっと588通りの各組合せの中から、損のし過ぎや儲け過ぎの両極端の組合せ販売はやめ、そこそこの利益の出せる組合せ範囲を取捨選択するとか・・・。商品群を複数のブロックに分け対象を絞り、損のし過ぎや儲け過ぎを小さくし、ブロック毎 に時期をずらしてキャンペーンをするとか・・。あっ大きなお世話でした。スミマセン。

mabomk
質問者

お礼

皆様ご回答多謝! PC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.3

条件(1)については二人の方が回答していますので省略 条件(2)の組み合わせについて    7種類から3個を選ぶ組み合わせは84とおり 84*7=588通りになると思います 商品名をA,B,C・・と省略して A,A,B+B とA,B,A+B は同じ また、やすい買い物のしかたというクイズだとすると A,A,G+G という買い方ではなく G,G,A+A というのも考慮するのかな

mabomk
質問者

お礼

皆様ご回答多謝! PC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

アクセスのクエリなら直積で一分も掛からないのですが・・ Excel だとどうなんでしょ 条件(1)同一商品を3個買えば、同一商品又は自分の好きな他の商品を1個無料進呈 これは7パターンじゃなくて無料進呈のも計算に入れるですよね imogasiさんのレスを見て気が付きました 同一商品の組み合わせは7パターンで それぞれで無料進呈7品目が選ばれるから 7^2 = 49 条件(2)違う商品でも兎に角3個買えば、他の商品1個を無料進呈 こっちは、購入商品 7^3 = 343 パターン それぞれで無料進呈7品目が加わるから 結局 7^4 = 2401 Excel のワークシート関数はほとんど分からないので VBAだと 一番目のシートのA列を挿入して、下記のようになってるとして 1 AAA 8500 2 BBB 6800 3 CCC 8000 4 DDD 5800 5 EEE 4800 6 FFF 9000 7 GGG 8800 下記コードを標準モジュールに貼り付けて実行すれば シート2の A列~I列が購入商品パターン、J列からL列が無料進呈となると思います。 Option Explicit Sub test() Dim j1 As Integer Dim j2 As Integer Dim j3 As Integer Dim j4 As Integer Dim k As Integer With Application   For j1 = 1 To 7     For j2 = 1 To 7       For j3 = 1 To 7         For j4 = 1 To 7           k = k + 1           Worksheets(2).Cells(k, 1).Value = Worksheets(1).Cells(j1, 1).Value           Worksheets(2).Cells(k, 2).Value = Worksheets(1).Cells(j1, 2).Value           Worksheets(2).Cells(k, 3).Value = Worksheets(1).Cells(j1, 3).Value                      Worksheets(2).Cells(k, 4).Value = Worksheets(1).Cells(j2, 1).Value           Worksheets(2).Cells(k, 5).Value = Worksheets(1).Cells(j2, 2).Value           Worksheets(2).Cells(k, 6).Value = Worksheets(1).Cells(j2, 3).Value                      Worksheets(2).Cells(k, 7).Value = Worksheets(1).Cells(j3, 1).Value           Worksheets(2).Cells(k, 8).Value = Worksheets(1).Cells(j3, 2).Value           Worksheets(2).Cells(k, 9).Value = Worksheets(1).Cells(j3, 3).Value                    Worksheets(2).Cells(k, 10).Value = Worksheets(1).Cells(j4, 1).Value           Worksheets(2).Cells(k, 11).Value = Worksheets(1).Cells(j4, 2).Value           Worksheets(2).Cells(k, 12).Value = Worksheets(1).Cells(j4, 3).Value         Next       Next     Next   Next End With End Sub

mabomk
質問者

お礼

皆様ご回答多謝! PC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

(A)同一商品を買う例 買う品物に7種ありそれに無料進呈が7種あり、 買う商品と無料進呈品は影響を受けないから 7x7=49 重複順列=7^2 49 (B)違う商品でも兎に角3個+無料進呈1個 重複順列=7^4 2401 式 (A) Sheet1の A1:D1にAを入れる。 下記式を入れる A2 =CHAR(CODE(A$1)+INT((ROW()-1)/7)) B2 =CHAR(CODE(B$1)+INT((ROW()-1)/7)) C2 =CHAR(CODE(C$1)+INT((ROW()-1)/7)) D2 =CHAR(CODE(D$1)+(MOD(ROW()-1,7))) (B) Sheet2の A1:D1にAを入れる 下記式を入れる 2401行まで式を複写する。 A2 =CHAR(CODE(A$1)+MOD(INT((ROW()-1)/7^3),7)) B2 =CHAR(CODE(B$1)+MOD(INT((ROW()-1)/7^2),7)) C2 =CHAR(CODE(C$1)+MOD(INT((ROW()-1)/7),7)) D2 =CHAR(CODE(D$1)+(MOD(ROW()-1,7))) これで組み合わせの表ができる。A-Gを商品名で置換する(7回) すれば商品組み合わせ表らしきなる。 エクセル向きの問題ではないと思う。 組み合わせや順列の問題は、COMBIN、PERMUT関数はあっても、実際の組み合わせ表示等はエクセル向きではない。 VBAでやる問題かもしれない。 上記まで考えたが、自信なし。参考にしてください。(B)で重複した 同じ組み合わせを数えているかもしれない。これを参考にできれば よく考えてください。 正しい良い回答を期待するなら、数学のカテに質問すべきと思う。

mabomk
質問者

お礼

皆様ご回答多謝!6月末にPC買替後、突然「教えてgoo」の読み書き不能に陥りました。お返事お礼遅れましたことをお詫びします。お手間と労力お掛けした皆様のご回答に対し感謝・感謝です。勉強になりました。

関連するQ&A

  • エクセルの改ページを自動で行う方法

    エクセルの質問です。 今、在庫表をエクセルで作っています。 単純化すると以下のような形です。 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 2 |CCC |10 2 |DDD |2 3 |EEE |1 3 |FFF |2 3 |GGG |3 これを印刷するときに 棚番号が同じものをまとめて印刷したいと思います。 (下記のように3枚に分かれればいいです。) 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 棚番号|商品名|商品数 ------+------+------ 2 |CCC |10 2 |DDD |2 棚番号|商品名|商品数 ------+------+------ 3 |EEE |1 3 |FFF |2 3 |GGG |3 このような形です。 ページ番号は通しの番号を振りたいと思います。 改ページを手動で入れていってもいいのですが、実際は棚が200くらいあるため合理的ではないです。 棚番号が変わったら自動で改ページするような機能はないでしょうか。

  • エクセルのマクロについて

    エクセル97のマクロについて教えてください。 下のようなエクセルシートがあると仮定します。 このシート全体を選択して用意してあるボタンを押すと、マクロが流れるようにします。 マクロの中身は、項目1~4の値が同じであれば、同じデータを一つにするというものを考えています。 たとえば下の例の場合、追番でいえば2と4のデータは同じなので、マクロ処理にかけると、追番の大きい4のデータは消え、2のデータの"200"項目にフラグ1が追加されるようにしたいのです。 項目の値が同じであれば、いくつでもデータを統一したいと考えています。 ================ エクセル シート例 ================================== 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1**************1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* 4****EEE****FFF****CCC****GGG****1****1*********1**** ↓ マクロ処理後 追番_項目1_項目2_項目3_項目4_100_200_300_400 ← 見出し ----------------------------------------------------------------- 1****AAA****BBB****CCC****DDD****1*********1****1**** 2****EEE****FFF****CCC****GGG****1****1*********1**** 3****HHH****FFF****KKK****JJJ****1****1****1********* =================================================================== 注:見出しの_とデータの中の*は空白を生めるためのもので、データとはまったく 関係ありません。 なにぶんエクセルVBAは初心者同然なもので... よろしくお願い致します。

  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • Excelで、自動でデータのナンバー付けをしたい

    エクセルで、商品管理をしているのですが、以下のようなエクセルファイルのデータをフィルタ後(件数が0より多いものでフィルタをかけた後)、項目のナンバーを再び1から順につけていきたいと思っています。 ------------------エクセルファイル------------------ 項目  商品名  商品ID   単価   件数   金額  1    AAA   BBB    ¥2,000   1    ¥2,000  2    CCC   DDD    ¥1,200   19    ¥22,800  3    EEE   FFF     ¥1,000   0    ¥0  4    GGG   HHH    ¥1,000   3    ¥3,000  5    III     JJJ     ¥500    0    ¥0  6    KKK   LLL     ¥400    2    ¥800                          小計   ¥28,600 --------------------------------------------------- 上記のファイルを、件数が0より多いものでフィルタをかける。 つまり、エクセルファイルは、以下のようになります。 ------------------エクセルファイル------------------ 項目  商品名  商品ID   単価   件数   金額  1    AAA   BBB    ¥2,000   1    ¥2,000  2    CCC   DDD    ¥1,200   19    ¥22,800  4    GGG   HHH    ¥1,000   3    ¥3,000  6    KKK   LLL     ¥400    2    ¥800                          小計   ¥28,600 --------------------------------------------------- この場合、項目のナンバーが1、2、4、6、という順番になっているので、 これを1、2、3、4、という順番に置き換えていきたいと思っています。 データ数が少なければ手動でやっても良いのですが、 データ数が膨大な量になるので、これを自動で出来るようにしたいと思っています。 VBAで挑戦を試みましたが、なかなか上手くいきませんでした。 何か上手くできる方法はございませんか? どなたかご教授をお願いします。             

  • [VBA]改行入りのセルの値を配列に格納したい

    EXCELのA列に下記のような値が入っています。 ----------- "aaa bb cccc" ----------- "ddd" ----------- "" ----------- "eee fff ggg hhh" ----------- といったようにセルの中の値に改行があったり、 なかったり、値すらなかったりといった感じです。 これを改行区切りで配列に入れたいんですが、いい方法ありませんか? 上の内容を下記のような配列にしたいんです。 arrValue=Array("aaa","bb","cccc") arrValue=Array("ddd") arrValue=Array("") arrValue=Array("eee","fff","ggg","hhh") よろしくお願いします。

  • Excelで最適な組み合わせ

    よろしくお願いします。 Excel複数の組み合わせの中から最適な値を求めたいのですが下記の条件の場合どうしたらいいでしょうか? 例)所持金100万円で掛金が1口10429円・13036円・15643円の3つのコースがある場合、所持金の残高が最も少ない額にする このような条件の場合どうすれば良いでしょうか? 色々調べたところ、ソルバーが良いみたいなのですがイマイチよくわからなかったので教えてください。ソルバーを使わなくても出来る方法があればそちらでも構いませんのでご教授の程よろしくお願いします。

  • EXCEL VBA 行列操作

    どなたか教えてください。 下記の様にA1からH5までの範囲に値がある行とない行があります。 空白セルを無視しA10に行列を操作し(行列入れ替え?)、さらに上詰め でコピーしたいのです(上にある行から列順に)。 よろしくお願いします。 例です  A   B   C   D   E   F  G   H 1 2                   aaa bbb 3 ccc ddd eee fff ggg 4 5 hhh ~ 10 aaa 11 bbb 12 ccc 13 ddd 14 eee 15 fff 16 ggg 17 hhh

  • エクセルで組み合わせの計算式を使いたい

    エクセルで以下のような計算式を(最適な組み合わせの抽出)をしたいのですが? 表の中にある様々な単価から2以上の合計が一定額となる組み合わせを抽出したい。 もっと具体的にいうと、私が作った買いたい本のリストの中から、2以上の組み合わせで1500円となる組み合わせをエクセルから抽出したいのです。 よろしくお願いします。

  • 大量データの一括変換

    aaa.bbb ccc.ddd eee.fff ggg.hhh 上記のようなデータが約1万行程度あるのですが、これを下記のようなユーザ名・メルアドに変換するコマンド等、お分かりになる方教えてください。ユーザ名・メルアドの間は半角スペースです。 ある程度自分で調べた結果awk等で出来そうな気がするのですが。。。 ユーザ名  メルアド   ↓     ↓ aaa.bbb aaa.bbb@hoge.com ccc.ddd ccc.ddd@hoge.com eee.fff eee.fff@hoge.com ggg.hhh ggg.hhh@hoge.com

  • VBAでCSV内にある改行を取る方法

    あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb  bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。

専門家に質問してみよう