海外旅行から帰ってきたら、まず何を食べる?

Excelを使って 次の問題を解く方法(関数など)ありますでしょうか?
よろしくお願いいたします。

問題
□の中に“+”もしくは“-”を入れ、計算式を完成させる。

(1)  98□(-76)□(-54)□(-3)□(-21)=100

(2)  123□4□5□67□89=100


よろしくお願いいたします。

A 回答 (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で確認しましたが、他のバージョンについては未確認です。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
試してみたのですが・・
3~5までの作業でミスがあるのでしょうか?
最終的に 答えを検出することができませんでした・・・
もう一度やりなおしてみます。
勉強になりました。
感謝しております。

また何かありましたらよろしくお願いいたします。

お礼日時:2002/05/25 23:38

マクロを作ってみました。


使う数値を縦に並べ、最後に指定する合計値を入力します。例えば、

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
    • good
    • 0
この回答へのお礼

nisi6さん こんばんは。
マクロまで作っていただき ありがとうございます。
難しいですね・・
ですが、最近Excelに興味を持っています。
簡単なマクロが精一杯の私ですが がんばって挑戦してみます。
Excelに対して 拒絶反応を起こしていたのですが
奥の深いソフトと、あせらず勉強してみます。
また何かありましたら 教えて下さい。
本当にありがとうございました。

お礼日時:2002/05/25 23:50

あ,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を比べて,いくつ引かなくちゃいけないのかわかれば,
比較的簡単に見つけられます.
    • good
    • 0
この回答へのお礼

こんばんは。
ご回答ありがとうございます。
とりあえず すべてを和にしてそのあと考えればいいのですね・・
wolvさんのやり方を教えていただき感謝いたします。
これからも使いたいと思います。
初心者の私に優しいご回答、ありがとうございました。

お礼日時:2002/05/25 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報