• 締切済み

Excelの活用について

ザックリとしたタイトルですみません。 Excelで入力した数字の平均値を出し、その平均値に近い構成のグループを自動的に作成するようなマクロ?が作れないかと思って質問しました。 具体的には、 仮に1000、1100、1200、1300、1400、1500、1600、1700、1800、1900がいたとして、 平均すると1450の為1000、1100、1500、1700、1900の平均1440と1200、1300、1400、1600、1800の平均1460のような事を自動的に割り振るような事をしたいのです。 一度どこかで見たことがあったのですが、こういうものを作成するには何を使うと良いのかがサッパリだったので質問しました。 自身では作成は出来ないとは思った為依頼をしようかとも思ってますが、どのくらいかかりそうな物でしょうか?

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問にある数値を使って実際に計算してみました。(Excel2010です。重要です) まず、添付図の説明ですが、 セルA5:=0、下方向のセルに連番で1023まで入力 セルB4:=1000、右のセルに100飛びで1900まで入力(質問にある数値) セルB1:=9、右のセルに-1飛びで0まで入力(2進数の桁の重み) セルL2は指定する平均値1、セルM2は指定する平均値2 セルB5:=MOD(INT($A5/2^B$1),2)、K5までコピー 0~1023を2進数のビットに分けています。0、1が組み合わせです。全件網羅になります。 セルL5:=IFERROR(AVERAGEIF(B5:K5,1,$B$4:$K$4),0)    2進数のビットが1の数値の平均 セルM5:=IFERROR(AVERAGEIF(B5:K5,0,$B$4:$K$4),0)    2進数のビットが0の数値の平均 セルN5:=IF(AND(ROUND(L5,0)=$L$2,ROUND(M5,0)=$M$2),"○","")    四捨五入した数値が指定した平均値と一致したら「○」 セルO2:=COUNTIF(N5:N1028,"○")    「○」の個数 入力したB列からN列の算式を下にコピーします。これで出来上がりです。 使い方は、セルL2、M2に平均を2つ入力します。そのあとフィルターを使って、N列の「〇」を絞り込んで表示します。セルO2に満足する組み合わせ数が表示されています。 >その平均値に近い構成のグループを自動的に作成するようなマクロ?が作れないかと思って質問しました。 まず質問の内容を整理すると、  ・10個の数値を使い任意の組み合わせを2つ作る  ・そして各々の平均値が指定の数値に近いこと になりますが、 実際に作るとなると、  ・実際は数値は何個程度なのか。組み合わせの場合の数は対象の個数が増えるにつれて爆発的に増えていきます。重要な要素です。  ・「近い」をどのように定義するか。添付図では、組み合わせの平均を整数に四捨五入して比べています。  ・解が求まったらそこで終了か、または継続?   計算機がもてあますような数値の個数なら全件網羅してどこかで打ち切りか、モンテカルロ法(例えば。有効かどうかは不明)を使って1つで済ませるか(モンテカルロ法で複数回可能ですが)。  ・添付図では1024種類の組み合わせ(2の10乗)が計算されていますが、その平均「値」の種類は106個でした。原因は質問の数値の増分が等しいためですが、平均値1を指定すると、もう一つの平均値2は平均値1に従属になります。 平均値の個数は、数値の最小値 ≦ 平均値 ≦ 数値の最大値 です。添付図で2つの平均値を入力するとほとんど該当の組み合わせが出てきません。このあたりは、2つの平均値の指定方法に工夫が必要でしょう。 そのような理由で、マクロではなくシートで計算してフィルターを使うようにしてみました。平均値1をフィルターで絞り込んで平均値2をどれにするか選ぶのが合理的に思えました。このシートの計算をマクロにするのは簡単ですが、合理的に2つの平均値を選ぶことをマクロですることはしたくないですね。(フィルターで選べばいいので) >自身では作成は出来ないとは思った為依頼をしようかとも思ってますが、どのくらいかかりそうな物でしょうか? 添付図の程度ならご自分で作れるのでは? シートしか作っていないので、シートについては、  横の数値、縦の数値・・・・1分  算式は実質4、5個・・・・・3分  縦(行方向)にコピー・・・1秒弱 こんなものでした。(後から分析のために時間が10分くらいかかっています)この解答が一番時間がかかっています。 マクロは、全件網羅の組み合わせで最初の平均値を計算して、条件に合致したらもう一つの平均値を計算(逆算)して合致するか調べることになるでしょう。1つの組み合わせを書けば後は繰り返しです。シートで何を計算しているか説明すれば、検証の時間は除くとして、作るのは30分程度でしょうか。組み合わせがなかなか見つからないでしょう。 書き洩らしましたが、10個の数値を2つのグループに分けています。ここで、1つの数値はどちらかのグループに含まれています。これが、含まれない場合も想定する場合は、2進数のビットで組み合わせで表現しているところを3進数に変え、1023(2の10乗-1)を59048(3の10乗-1)にします。こうやって計算量の爆発が起きます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

とりあえずエクセルの機能で「ソルバー」とかを使うと出来そうです。 ただしご相談に書かれてるお話(考え)だけでは、成立する組み合わせが沢山ありすぎて困ると思います。 たとえばグループを「1400と1500」と「それ以外」とすれば、どちらの平均もぴったし1450に揃います。 4個と6個のグループでも同じに出来ます。 じゃぁと例えば「どちらも5個ずつ」という追加の制約を課したとしても、平均1440になる組み合わせは 「1000と1200と1400と1700と1900」 「1100と1200と1400と1700と1800」  :  : みたいに多数存在するので、もっと「こういう組み合わせになるように選びたい」という何か追加の条件を考えた方が良いでしょう。 どういうロジックで何を探索させたいのか考えれば、あとはそれを実現できるようにエクセルを作成しソルバーを動かすだけです。 ご利用のエクセルのバージョンとか不明なので具体的に手取り足取り操作をお話しは割愛しますが、下記など例えばご参考に。 http://office.microsoft.com/ja-jp/excel-help/HP010342416.aspx グループ分けは、例えば「バイナリ」を使い0と1を記入させて「グループ0」「グループ1」の2つに分けるような段取りで実現します。 #ご相談投稿では、普段あなたがご利用のソフトのバージョンまでキチンと明記する事を憶えて下さい。

関連するQ&A

  • エクセルの活用

    エクセル上でテクニカルチャートを作成しているのですが、『この数字がでたらいくつ』という考え方で作成しています。 例) 0.5%~1%=1 1.1%~1.5%=2 1.6%~2.0%=3 といった具合です。 最終的に合計を出すだけの単純作業なんですが、この『●~●が○』という計算が手作業なので、非常に面倒なのです。 エクセルが自動的に該当する数字を割り出してくれる機能はないものでしょうか。 ご存知でしたらお願いいたします。

  • Excelの表作成について

    Excelの表作成について Excelの表で、1~50までの数字から3つの数字を抽出し、20通りの異なる組み合わせのグループを作成したいです。 例えば「1,34,42」「5,20,18」など、数字は連番ではなくランダムに抽出したいです。 そのうえ同じグループ中は異なる数字で構成したいです。 (例えば「23,8,23」のように、同じ数字は入れたくない) そのような数字の抽出に使用できるような関数や数式があれば教えてください。 宜しくお願いします。

  • EXCELの統合

    今EXCELを勉強しているのですが、解からないので教えてください。 EXCELで統合をした後で数字を変更したり、項目を増やした時にその変更をした数字や項目を統合した表に自動的に反映する事は出来ますか。 やはりマクロを使わないといけませんか。 まだマクロは勉強していないので、マクロで何が出来るかは解かりません。 後、マクロとは何ですか。どんな事が出来るのですか。 是非教えてください。お願いします。

  • EXCELで変数をペーストしたい

    エクセルマクロでテストデータを自動作成するプログラムを書こうとしています。 変数Aに数字のゼロを入れて、指定セルにペーストしていきたいのですが、どのようにすればいいのでしょうか? pasteの使い方がわからないので教えてください。

  • excelの組合せ計算について

    0か1かが入る組合せの全通りがわかる計算を教えてください! 具体的に言うと、3この数字の場合は000、001、010、011、111になると思うのですが、それをエクセルで自動的に全通り出す式もしくはマクロが知りたいです。 3この場合は頭で考えればできるのですが、例えば8この場合、00000000、00000001、00000010、…等をすべて出すのは大変なのでエクセルで一気に出せないかと思った次第です。 すいませんが回答お待ちしております!

  • エクセル・・・・印字部数の任意指定について

    毎度・毎度 申し訳ありません。エクセルでの質問です よろしくお願いします。 「シート1」の(A1)に数字 1 が入っていて、マクロされたボタンを押下したら、シート2の内容が1部印刷される、(A1)に数字 2 って入っていたら、シート2の内容が2部印刷されるという、印字部数を任意で変えれる、マクロ作成方法を教えて頂きたいのですが・・・ツール→マクロ→新しいマクロの作成であれば、印字部数が固定される為、よろしくお願い致します。

  • Excelのプログラムについて

    "Excel エクセル"で添付画像のようなプログラムの作成は可能でしょうか? (1)Sheet1の入力欄に数字を入力すると、(2)Sheet2にある総当たり表を参照して、(3)Sheet1に入力した数字で新しく総当たり表を作成する ※入力欄に入れる数字を変えれば自動で出力される総当たり表の内容も変わる 私は、エクセルのマクロとか関数の初心者で詳しいことが分からなくて困っています。 これを機に勉強しようと考えておりまして 〇エクセルでこのプログラムが書けるのか 〇どの関数を勉強すればよいのか を教えていただければと思います。 よろしくお願いいたします。

  • エクセル2000 で ファイルを開いたときに ある処理を実行するには?

    質問です. タイトルどおりですが, エクセル2000 で ファイルを開いたときに ある処理を実行するには どうしたらよいですか? 具体的にはあるプロシージャ(マクロ)を作成しておき, ファイルを開くと同時に自動実行する方法です. アクセスにおいてのautoexec のイメージなんですが... エクセルよくわからないので よろしくお願い致します.

  • エクセルのマクロでエクセルを終了することができますか。

    エクセルでマクロを作成しました。 このマクロを実行したら、エクセルを自動的に終了(ファイルF→終了X)するようにしたいのですが、できますか? ぜひ、教えて下さい。 なお、エクセル2000を使用してます。

  • Excelのマクロについて

     エクセルで例えばA1の欄にTECって打ち込んだらB1の欄に自動的に0,MEKって打ち込んだら自動的に1って数字がでてくるようなマクロってどういうやりかたでしょうか?  ちょっと上司に作るように頼まれたのですが私は簡単な数式のマクロしかしらないもので・・・  ご存じの方、もしいらっしゃれば教えていただければと思います。よろしくお願いします。