Excelで、ランダムな10個〜30個の数値があり、その数値から重複無くいくつかを足し合わせて、目的の数値とする方法はありますか?


例)1258;800;777;584;498;455;21;36;11;5
という10個の数字から、合計が2302となる数値の組み合わせがあるか見つける。
上記の例だと1258+584+455+5=2302という答え。

関数で解決したいです。
マクロは使いたくありません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:garyo No.1

回答回数1782ベストアンサー獲得回数96

ポイント30pt

これは通常NP問題と呼ばれています。

URLを参照願います。

全部試せば答えがでるが、数が増えると組み合わせの数が多くなり実質的に計算不能になる問題です。

id:asamiros

なるほど。総当りしか手が無いんですね。

2004/08/04 16:50:46
id:garyo No.2

回答回数1782ベストアンサー獲得回数96

ポイント60pt

http://www.vector.co.jp/

Vector:ソフトウェア・ライブラリ&PCショップ

URLはダミーです。

EXCELを使用して計算する方法を考えます。

(当然数が増えると計算不能になります)

例 1,2,3,4の4つの数の組み合わせを調べる場合

全ての数は(選ばれる、選ばれない)のどちらかであるので

組み合わせの数は2^4=16通りになる。

A1-A16に「1」を入れる

B1-B16に「2」を入れる

C1-C16に「3」を入れる

D1-D16に「4」を入れる

E1=1,E2=2,...,E16=16を入れる

F1-F16に「=MOD(E1,2)」を入れる

G1-G16に「=MOD(INT(E1/2),2)」を入れる

H1-H16に「=MOD(INT(E1/4),2)」を入れる

I1-I16に「=MOD(INT(E1/8),2)」を入れる

J1-J16に「=A1*F1+B1*G1+C1*H1+D1*I1」を入れる

全てのセルを選択しJの列でソートする。

Jの値が求める値になる行が答え

id:asamiros

やってみました。2進数を使った総当りですね。

Excelだと、行が65,536までだから、

16個までが限界ですね。

16個以内なら、この方法で解決できますね。

2004/08/04 17:07:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません