- ベストアンサー
セル内に文字として式を入れて答えを別のセルに...
お世話になります。 例えば下記の表現のままひとつのセルに文字として式を書き、別のセルに答えを出す方法はございませんでしょうか? 10+20+30-40×10÷2 とひとつのセルに入力、 別のセルに100と答えが出ないでしょうか?
- みんなの回答 (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
その他の回答 (9)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'頭から順番に計算していきたい場合 '=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
お礼
ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
>10+20+30-40×10÷2 これはー140ではないの。 >頭からでも通常の数学的の場合も条件を指定できればありがたいです。 これはどんな意味。条件とは。 これは「コンパイラのつくり方」の本でも勉強すべきでしょう。逆ポーランド記法などという語句を知ってますか。技巧が要ります。こういうのが簡単に数行のプログラムで、できればよいなというのが、プログラマの夢ですが、一般には簡単にはできないでしょう。ましてエクセルでは。特にエクセルの関数式では。 エクセルは半角でセルに=の後に10+20+30-40*10/2といれは、答えのー140を出す機能はあります。 電卓の操作の数値と四則演算キーのキーインのペアを記述したものとして計算して答えを出すほうがVBAプログラムでやるにしても易しそう。
お礼
ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 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と答えが出ないでしょうか? 数式が違うのに、別の答えを出せっていうのは、それは、私は分らないですね。
お礼
ご回答ありがとうございます。やってみます。
- EL-SUR
- ベストアンサー率76% (83/108)
#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でユーザー定義関数をつくってもできるでしょうが、いずれにしても一般機能ではムリだと思います。
お礼
ご回答ありがとうございました。一度やってみます。
- merlionXX
- ベストアンサー率48% (1930/4007)
答えを出すセルを選択して、メニューの「挿入」、「名前」、「定義」 名前(W)に ev (好きな名前でかまいません) 式が文字ではいっているセルがB1だったら、参照範囲(R)に =EVALUATE(B1) として、 答えのセルに =ev ただし、×は*、÷は/であらわしてくださいね。
お礼
ありがとうございました。
補足
ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。
- fukkyse
- ベストアンサー率32% (130/402)
質問者様の求めている表現とは少し違ったイメージになってしまいますが。 数式用Sheetと表示用Sheetの二つのSheetを準備します。 数式用Sheetは、ツール→オプション→表示→数式にチェックを入れます。 セル(仮にA1)に=10+20+30-40*10/2を入力。コピーして表示用SheetのA1に、シフトキーを押しながら「編集」→図のリンク貼り付け。B1に「=数式!A1」で計算結果。数式の入力、修正は数式用Sheetにて。 10+20+30-40×10÷2 と言う表現方法はチョット難しいので…。
お礼
ありがとうございました。
補足
ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。
ちょっとでと思ったのですが、私の力では...面倒でした。 しゃーないので計算機を起動して式を送って答えを取得する方法を示しておきます。 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 これで、クリップボードに答えが返されます。 *式を送出するように改造! *クリップボードを表示するようにコードを追加!
お礼
ありがとうございました。
- AppleRin
- ベストアンサー率40% (22/54)
計算式に関しては hirumin さんにお任せします 多分 結果を別のセルに出したいということだと思いますが 一番簡単なのは 式の入ったセル番地が A1 であったとすれば 当然式は =10+20+30-40*10/2 と入力しますね 答えの出てほしいセルに =A1 と入れれば可能です 質問の意味を取り違えていたならすみません
お礼
ありがとうございました。
補足
ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。
- hirumin
- ベストアンサー率29% (705/2376)
> 10+20+30-40×10÷2 > 別のセルに100と答えが出ないでしょうか? 普通に計算すれば答えは-140ですよね。 (10+20+30)-(40×10÷2)となりますから。 それとも頭から順番に計算していきたいのでしょうか? {(10+20+30-40)×10}÷2
お礼
ありがとうございました。
補足
ご回答ありがとうございます。ごめんなさい、説明が不十分でした。頭からでも通常の数学的の場合も条件を指定できればありがたいです。
お礼
すごいです!希望通りです。ありがとうございました。