アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
例えば下記の表現のままひとつのセルに文字として式を書き、別のセルに答えを出す方法はございませんでしょうか?

10+20+30-40×10÷2

とひとつのセルに入力、

別のセルに100と答えが出ないでしょうか?

A 回答 (10件)

1. 「ツール」→「マクロ」→「Visual Basic Editor」でマクロのエディタを開く。


2. Sheet1を開いて、以下のマクロを書き込む。
3. Sheet1のセル A1 に
  10+20+30-40×10÷2
  を書き込む。
4. Sheet1のセル B1 に答えである -40 が表示される。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim str As String
If Target = Range("A1") Then
str = "=" & Range("A1")
str = Replace(str, "×", "*")
str = Replace(str, "÷", "/")
Range("B1").Value = Evaluate(str)
End If
End Sub
    • good
    • 0
この回答へのお礼

すごいです!希望通りです。ありがとうございました。

お礼日時:2006/03/21 06:45

'頭から順番に計算していきたい場合


'=calc("10+20+30-40*10/2")
'100
Public Function calc(exp As String)
Dim a, i
exp = "+" & exp
a = 0
Do While Len(exp) <> 0
For i = 2 To Len(exp)
If InStr("+-*/", Mid(exp, i, 1)) <> 0 Then
Exit For
End If
Next
a = Evaluate(a & Left(exp, i - 1))
exp = Mid(exp, i)
Loop
calc = a
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:47

>10+20+30-40×10÷2


これはー140ではないの。
>頭からでも通常の数学的の場合も条件を指定できればありがたいです。
これはどんな意味。条件とは。
これは「コンパイラのつくり方」の本でも勉強すべきでしょう。逆ポーランド記法などという語句を知ってますか。技巧が要ります。こういうのが簡単に数行のプログラムで、できればよいなというのが、プログラマの夢ですが、一般には簡単にはできないでしょう。ましてエクセルでは。特にエクセルの関数式では。
エクセルは半角でセルに=の後に10+20+30-40*10/2といれは、答えのー140を出す機能はあります。
電卓の操作の数値と四則演算キーのキーインのペアを記述したものとして計算して答えを出すほうがVBAプログラムでやるにしても易しそう。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:46

こんばんは。



Ver4.マクロ関数の回答が出ているので、VBAで作ってみました。

'標準モジュール
Function FEVALUATE(arg As Variant) As Variant
Dim buf As String
If VarType(arg) = vbString Then
 buf = StrConv(arg, vbNarrow)
 buf = Replace$(buf, "×", "*")
 buf = Replace$(buf, "÷", "/")
 On Error Resume Next
 buf = Evaluate(buf)
 If Err() = 0 Then
  FEVALUATE = CDbl(buf)
 Else
  FEVALUATE = arg
 End If
 On Error GoTo 0
End If
End Function


それから、
>別のセルに100と答えが出ないでしょうか?

数式が違うのに、別の答えを出せっていうのは、それは、私は分らないですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。やってみます。

お礼日時:2006/03/21 06:41

#5の merlionXXさんと同じ方法ですが、


次のようにすれば×や÷を使っていても計算可能です。
もちろん * や / でもOK。

>10+20+30-40×10÷2
A1セルに↑のように入っていて、計算結果をB1セルとします。

B1セルを選択して(←←コレがポイント)
メニューの「挿入」-「名前」-「定義」
■ 上の「名前」に、keisan と入れます。(←←任意です。他の名前でもOK )

■ 下の「参照範囲」に
=EVALUATE(SUBSTITUTE(SUBSTITUTE(A1,"×","*"),"÷","/"))

と入れて 「OK」。↑をコピーして Ctrl+Vキーで貼り付けできます。
式を修正するときは F2キーを押してからにしてください。

■ B1セルに
=keisan

と入力すれば、計算結果 -140となります。
=IF(A1="","",keisan)

とすれば、A1が空白でもエラーにはなりません。

結果を 100にしたければ A1は
(10+20+30-40)×10÷2
のように( )を使ってください。
>頭からでも通常の数学的の場合も条件を指定できればありがたいです。
↑の意味がよくわかりませんでした...

A2セル以下にも文字列の式を入力する場合は、B1の式を下にオートフィルでコピーします。
 ◇
なお、この方法は 4.0マクロ関数を使ったものです。
VBAでユーザー定義関数をつくってもできるでしょうが、いずれにしても一般機能ではムリだと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。一度やってみます。

お礼日時:2006/03/21 06:39

答えを出すセルを選択して、メニューの「挿入」、「名前」、「定義」


名前(W)に ev (好きな名前でかまいません)
式が文字ではいっているセルがB1だったら、参照範囲(R)に =EVALUATE(B1)
として、
答えのセルに =ev

ただし、×は*、÷は/であらわしてくださいね。

この回答への補足

ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。

補足日時:2006/03/21 06:24
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:36

質問者様の求めている表現とは少し違ったイメージになってしまいますが。



数式用Sheetと表示用Sheetの二つのSheetを準備します。

数式用Sheetは、ツール→オプション→表示→数式にチェックを入れます。
セル(仮にA1)に=10+20+30-40*10/2を入力。コピーして表示用SheetのA1に、シフトキーを押しながら「編集」→図のリンク貼り付け。B1に「=数式!A1」で計算結果。数式の入力、修正は数式用Sheetにて。

10+20+30-40×10÷2
と言う表現方法はチョット難しいので…。

この回答への補足

ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。

補足日時:2006/03/21 06:23
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:35

ちょっとでと思ったのですが、私の力では...面倒でした。


しゃーないので計算機を起動して式を送って答えを取得する方法を示しておきます。

B1=Keisan(A1)

とやれば式の結果がB1に表示する関数のヒント!

Private Sub CommandButton1_Click()
  Dim ReturnValue, I
  ReturnValue = Shell("calc.exe", 1)
  AppActivate ReturnValue
  For I = 1 To 2
    SendKeys I & "{+}", True
  Next I
  SendKeys "=", True
  SendKeys "%({E})", True
  SendKeys "+({C})", True
  SendKeys "%{F4}", True
End Sub

これで、クリップボードに答えが返されます。

*式を送出するように改造!
*クリップボードを表示するようにコードを追加!
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:33

計算式に関しては hirumin さんにお任せします



多分 結果を別のセルに出したいということだと思いますが

一番簡単なのは 
式の入ったセル番地が A1 であったとすれば
当然式は =10+20+30-40*10/2 と入力しますね

答えの出てほしいセルに =A1 と入れれば可能です

質問の意味を取り違えていたならすみません

この回答への補足

ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。

補足日時:2006/03/21 06:18
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 06:30

> 10+20+30-40×10÷2


> 別のセルに100と答えが出ないでしょうか?

普通に計算すれば答えは-140ですよね。
(10+20+30)-(40×10÷2)となりますから。

それとも頭から順番に計算していきたいのでしょうか?
{(10+20+30-40)×10}÷2

この回答への補足

ご回答ありがとうございます。ごめんなさい、説明が不十分でした。頭からでも通常の数学的の場合も条件を指定できればありがたいです。

補足日時:2006/03/17 15:10
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2006/03/21 05:56

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