No.8ベストアンサー
- 回答日時:
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
No.10
- 回答日時:
'頭から順番に計算していきたい場合
'=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
No.9
- 回答日時:
>10+20+30-40×10÷2
これはー140ではないの。
>頭からでも通常の数学的の場合も条件を指定できればありがたいです。
これはどんな意味。条件とは。
これは「コンパイラのつくり方」の本でも勉強すべきでしょう。逆ポーランド記法などという語句を知ってますか。技巧が要ります。こういうのが簡単に数行のプログラムで、できればよいなというのが、プログラマの夢ですが、一般には簡単にはできないでしょう。ましてエクセルでは。特にエクセルの関数式では。
エクセルは半角でセルに=の後に10+20+30-40*10/2といれは、答えのー140を出す機能はあります。
電卓の操作の数値と四則演算キーのキーインのペアを記述したものとして計算して答えを出すほうがVBAプログラムでやるにしても易しそう。
No.7
- 回答日時:
こんばんは。
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と答えが出ないでしょうか?
数式が違うのに、別の答えを出せっていうのは、それは、私は分らないですね。
No.6
- 回答日時:
#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でユーザー定義関数をつくってもできるでしょうが、いずれにしても一般機能ではムリだと思います。
No.5
- 回答日時:
答えを出すセルを選択して、メニューの「挿入」、「名前」、「定義」
名前(W)に ev (好きな名前でかまいません)
式が文字ではいっているセルがB1だったら、参照範囲(R)に =EVALUATE(B1)
として、
答えのセルに =ev
ただし、×は*、÷は/であらわしてくださいね。
この回答への補足
ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。
補足日時:2006/03/21 06:24No.4
- 回答日時:
質問者様の求めている表現とは少し違ったイメージになってしまいますが。
数式用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:23No.3
- 回答日時:
ちょっとでと思ったのですが、私の力では...面倒でした。
しゃーないので計算機を起動して式を送って答えを取得する方法を示しておきます。
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
これで、クリップボードに答えが返されます。
*式を送出するように改造!
*クリップボードを表示するようにコードを追加!
No.2
- 回答日時:
計算式に関しては hirumin さんにお任せします
多分 結果を別のセルに出したいということだと思いますが
一番簡単なのは
式の入ったセル番地が A1 であったとすれば
当然式は =10+20+30-40*10/2 と入力しますね
答えの出てほしいセルに =A1 と入れれば可能です
質問の意味を取り違えていたならすみません
この回答への補足
ご回答ありがとうございました。エクセル(コンピュータ)を一切分からない方が部下に対して自分で書いた手書きの表を手渡して「この通りにエクセルで作ってくれ」という指示をされ、手書きの表の表現通りに式をセルに転記し電卓で計算をして答えを式の隣のセルに書き写しているんだそうです。当然、×÷は*/ではだめで=は式の右側でないと怒られるんだそうです。
補足日時:2006/03/21 06:18No.1
- 回答日時:
> 10+20+30-40×10÷2
> 別のセルに100と答えが出ないでしょうか?
普通に計算すれば答えは-140ですよね。
(10+20+30)-(40×10÷2)となりますから。
それとも頭から順番に計算していきたいのでしょうか?
{(10+20+30-40)×10}÷2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
(Excel)数字記入セルの数値の後...
-
【エクセル】IF関数 Aまたは...
-
Excelで教えてください。 バー...
-
エクセルの書式設定の表示形式...
-
エクセル 足して割る
-
エクセルvba (ByVal Targ...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
枠に収まらない文字を非表示に...
-
Excel 例A(1+9) のように番地の...
-
エクセルのセルの枠を超えて文...
-
Excel2003 の『コメント』の編...
-
セルをクリック⇒そのセルに入力...
-
エクセル オートフィルタで絞...
-
セルの高さ(行高)を求めるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
【エクセル】IF関数 Aまたは...
-
Excelで数式内の文字色を一部だ...
-
エクセルで指定したセルのどれ...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
対象セル内(複数)が埋まった...
-
【Excel】 セルの色での判断は...
-
エクセル オートフィルタで絞...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
Excel 例A(1+9) のように番地の...
-
エクセルのセルの枠を超えて文...
-
エクセル 足して割る
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
Excel for Mac使用中ポインタが...
-
エクセルで住所と建物名を分け...
-
EXCEL VBA セルに既に入...
おすすめ情報