- ベストアンサー
Excelを使って問題と解きたいのですが・・・
Excelを使って 次の問題を解く方法(関数など)ありますでしょうか? よろしくお願いいたします。 問題 □の中に“+”もしくは“-”を入れ、計算式を完成させる。 (1) 98□(-76)□(-54)□(-3)□(-21)=100 (2) 123□4□5□67□89=100 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBAでプログラムを作るのが一番簡単ですが、先日某所で入手したテクニックを使ってやってみました。 1)A1、C1、E1、G1、I1に123、4、・・・と入れます。 2)16行コピーします。 3)B1、D1、F1、H1に+、+、+、+を入れます。 4)B2、D2、F2、H2に+、+、+、-を入れます。 5)16行目までに+と-の16種類の組み合わせを全部入れます 6)J1~J16に=を入れます。(この列は意味がありません) 7)K1に「=A1&B1&C1&D1&E1&F1&G1&H1&I1」を入れます。 8)K16までコピーします。K列に数式ができます。 9)挿入→名前→定義で名前の定義を出します。 10)上部の名前欄にEVAと入れます。 11)参照範囲に「=EVALUATE(Sheet1!K1)」と入れます。 12)OKを押します。 13)L1に=EVAと入力します。 14)L2~L16にコピーします 15)L1~L16に計算結果が出ています。 このEVALUATEが何者かはわかりません。ヘルプを探しても載っていませんでした。完全なパクリですので(^^;) なお、上記はEXCEL2002で確認しましたが、他のバージョンについては未確認です。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
マクロを作ってみました。 使う数値を縦に並べ、最後に指定する合計値を入力します。例えば、 A1= 123 A2= 4 A3= 5 A4= 67 A5= 89 A6=100 と入力して、A1:A6を選択した状態でツール→マクロ→マクロで『TashiHiki』を実行します。 解があれば、B、C、D列・・・に表示していきます。『1』が『+』、『-1』が『-』の意味です。 解は複数ありえますので、全て表示するようにしています。 解がなければ、『解はありません』のメッセージが出ます。 何個の数値まで計算できるか(実用的か)評価していません。10個は出ました。 ご参考に。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。 出てきたコードウインドウに下記マクロをコピーして貼り付けます。 ここから ↓ Sub TashiHiki() Dim rg As Range 'セル Dim NUM() As Integer '指定の数値 Dim fugo() As Single '数値に対する符号 Dim n As Integer, i As Integer '数値の個数、カウンタ '指定の数値を読み込む。最後が演算の答え n = Selection.Count ReDim NUM(n) As Integer, fugo(n) As Single For Each rg In Selection i = i + 1 NUM(i) = rg.Value Next Dim k As Integer '使った数値のカウンタ Dim Total As Long '計算してみた合計 Dim Col As Integer '列カウンタ '演算パターンを作る For i = 0 To (2 ^ (n - 1)) - 1 Total = 0 For k = 1 To (n - 1) If (i And 2 ^ (k - 1)) > 0 Then fugo(k) = 1 '加算する Total = Total + NUM(k) Else fugo(k) = -1 '減算する Total = Total - NUM(k) End If Next '一致する組み合わせがあったら If Total = NUM(n) Then Col = Col + 1 For k = 1 To (n - 1) Selection.Range("A1").Offset(k - 1, Col) = fugo(k) Next End If Next If Col = 0 Then MsgBox "解はありません" End If End Sub
お礼
nisi6さん こんばんは。 マクロまで作っていただき ありがとうございます。 難しいですね・・ ですが、最近Excelに興味を持っています。 簡単なマクロが精一杯の私ですが がんばって挑戦してみます。 Excelに対して 拒絶反応を起こしていたのですが 奥の深いソフトと、あせらず勉強してみます。 また何かありましたら 教えて下さい。 本当にありがとうございました。
- wolv
- ベストアンサー率37% (376/1001)
あ,evaluateというのがあるのですね. 同様のことがvalue()でできないかな?と思って 試して,errorになりました. それはさておき, evaluate()は 文字列を数式と見なして計算する(評価する)という機能だと思います. UNIXのshなどでもevalというコマンドがあったりします. しかし,質問の問題は普通にがんばって解くほうが簡単な気がします. 例えば,(2)なら, 123+4+5+67+89を計算し,例えば118になったとしたら(ならないけど) 目的の数値より18多いから,その半分の9を, 引かなくちゃいけない所を足してしまった のだとわかります.よって, もし 和が118になるのなら, 4と5は引くことにするとちょうど100になりますね. 123+4+5+67+89の計算が面倒なので,実際に解くのはパスしときます. (1)も同様に?, 98+76+54+3+21と100を比べて,いくつ引かなくちゃいけないのかわかれば, 比較的簡単に見つけられます.
お礼
こんばんは。 ご回答ありがとうございます。 とりあえず すべてを和にしてそのあと考えればいいのですね・・ wolvさんのやり方を教えていただき感謝いたします。 これからも使いたいと思います。 初心者の私に優しいご回答、ありがとうございました。
お礼
早速のご回答ありがとうございます。 試してみたのですが・・ 3~5までの作業でミスがあるのでしょうか? 最終的に 答えを検出することができませんでした・・・ もう一度やりなおしてみます。 勉強になりました。 感謝しております。 また何かありましたらよろしくお願いいたします。