- ベストアンサー
エクセル2007で計算内容と答えを表示するには?
エクセル2007を使用しています 計算式を表示する方法は他のHPなどに書いてありました 計算内容を表示する方法は書かれておりませんでした 例えば 190+25+25=240 このように1つのセルで190+25+25= もう1つのセルで240と表示したいのです なぜ1つなのかと言いますと今回例に挙げたのは3つの足し算ですが 4つの場合や9つの場合などマチマチで A1 190 A2 + A3 25 A4 + A5 25 A6 = A7 =A1+A3+A5 240と表示 この方法でもいいのですが かけ算や割り算があったりと なかなか同じ書式では無理なのです
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>他に方法があるなら是非教えて下さい。 私の書いた内容で誤解されてしまったようですが、あくまでも、ご質問者さんが、ご希望・ご要望されている内容について、修正し、ご提供する可能性はあるのですが、こちらからあえて、発案したものを、これはどうですかというようには、残念ながら出来ません。それは、掲示板の質疑・回答の範囲を越えてしまうからです。 もし、現在の段階で、何か、ご不満がありましたら、ご指摘くださるようにしてください。
その他の回答 (9)
- Wendy02
- ベストアンサー率57% (3570/6232)
お手間を取らせて、大変申し訳ありません。 'End Functionr '←何か、間違ったキーが混じったようです。rが余分です。 End Function '←正しくは、こうなります。 >↑ここまでです 何か、ここ数日、アップロードする時に、サイト側で、システムエラーを繰り返して、こちらのアップロードの確認がおろそかになってしまいました。
- Wendy02
- ベストアンサー率57% (3570/6232)
#7の補足を読みました。まだ、諦めていないようですね。 もし、他のモジュールに貼りつけたコードがありましたら、一旦、すべて削除してください。 決まったコードの登録方法があります。 Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、 #7で書いた、 Public Function GetReturn(argument.... End Function のコードを貼り付けます。 もし、どのブックでも使えるようにするなら、アドインにするか、個人用マクロブックの「標準モジュール」に貼りつけて使わなくてはなりません。(安易に考える人も多いようですが、これは、また難しい問題が関わってきます。) なお、もし、ユーザー定義関数がうまく行くようでしたら、必要に応じて、他のご要望にもお答えできるかと思います。ここで成功することがまず第一歩だと思います。つまずく人は、だいたいは、ここでつまずきます。
補足
早速ありがとうございます。 Visual Basic Editor画面の標準モジュール部分に教えて頂いた 内容をコピペしたのですが一行目の Public Function GetReturn(argument As Variant, Optional opt As Boolean, Optional k As Variant) この部分だけ背景が黄色くなり コンパイルエラー 構文エラー と表示されます A1に9×3= B1に= GetReturn(A1) 入力 ↓下記がコピペした内容です Public Function GetReturn(argument As Variant, Optional opt As Boolean, Optional k As Variant) 'GetReturn(数式,[数式付表示],[桁区切り]) Dim f As String, o As String, f1 As String Dim ret As Variant Dim wFlg As Integer If TypeName(argument) = "Range" Then If argument.HasFormula Then f = argument.FormulaLocal ElseIf VarType(argument) = vbString Then f = argument.Text Else GetReturn = "" End If ElseIf VarType(argument) = vbString Then f = argument Else GetReturn = "" End If f = Replace(f, "=", "", , , 1) f1 = f f = StrConv(f, vbNarrow) o = f If Left(o, 1) = Left(f1, 1) Then wFlg = 8 Else wFlg = 4 f = Replace(f, "×", "*", , , 1) f = Replace(f, "÷", "/", , , 1) ret = Evaluate(f) 'エラーチェック If IsError(ret) Then ret = argument.Text If ret = f1 Then GetReturn = f1: Exit Function If IsMissing(k) = False Then ret = WorksheetFunction.Fixed(ret, Val(k), False) End If If IsError(ret) Then GetReturn = "" If opt Then ret = StrConv(f1 & " = " & ret, wFlg) GetReturn = Replace(ret, Space(1), Space(1), , , 1) Else GetReturn = StrConv(ret, wFlg) End If End Functionr ↑ここまでです よろしければ教えて下さい。
- Wendy02
- ベストアンサー率57% (3570/6232)
質問者さんが、そのままにしているようですが、どうやら、これは、Excelの発想とはまったく違う種類のもののようです。質問が正しく伝わっていません。だから、こちらで、勝手に解釈して、回答を考えてみました。 >=A1+B1+C1と表示するのではなく >190+25+25と表示させたいのです こういう表現が混乱させたものだと思います。ここらは、別の意味に取ることにしました。つまり、=A1+B1+C1 ということはしない、というように解釈しました。 課題: *** A1+B1+C1というアドレス数式は使用しない。(逆のコードはなかなか難しい) =の表示は、右にある場合、左ある場合も両方ある。 表示されている計算式から、数値(答え)を表示したい。 セル上に置かれている位置は指定しないから、レイアウト自体は関係がない。 190 + 25 + 25 =「 」 隣のセルに入れる、数式と答えを表示の、どちらもある。 演算子は、+、-、×、÷ という表示形式、計算式に使う +,-,*,/ の両方がある。 以下のように汎用性を持たせました。 *** =GetReturn(数式,[数式付表示],[桁区切り]) 「=」はどちらでもよい 9×3= = GetReturn(A1) ....表示: 27 (全角で数式を入れると、全角表示する) 8*9+3 = GetReturn(A2,TRUE) 表示: 8*9 + 3 = 100 (数式表示する) 8×6×3×12 =GetReturn(A3,FALSE, -2)...表示:1,700 (桁を丸める) '=11/3 =GetReturn(A4,1, 3)... 表示 11/3 = 3.667 (小数点表示桁) 12÷3= =GetRetrun(A5,1)....表示 12÷3 = 4 =12+15*3(数式) =GetReturn(A6,1) ...表示 12+15*3 = 57 ="a"/1 =GetReturn(A7,1)....表示 "a"/1 = #VALUE! * =A1+B1 スタイルは、以下のユーザー定義関数では出来ません。 '//標準モジュール登録 Public Function GetReturn(argument As Variant, Optional opt As Boolean, Optional k As Variant) 'GetReturn(数式,[数式付表示],[桁区切り]) Dim f As String, o As String, f1 As String Dim ret As Variant Dim wFlg As Integer If TypeName(argument) = "Range" Then If argument.HasFormula Then f = argument.FormulaLocal ElseIf VarType(argument) = vbString Then f = argument.Text Else GetReturn = "" End If ElseIf VarType(argument) = vbString Then f = argument Else GetReturn = "" End If f = Replace(f, "=", "", , , 1) f1 = f f = StrConv(f, vbNarrow) o = f If Left(o, 1) = Left(f1, 1) Then wFlg = 8 Else wFlg = 4 f = Replace(f, "×", "*", , , 1) f = Replace(f, "÷", "/", , , 1) ret = Evaluate(f) 'エラーチェック If IsError(ret) Then ret = argument.Text If ret = f1 Then GetReturn = f1: Exit Function If IsMissing(k) = False Then ret = WorksheetFunction.Fixed(ret, Val(k), False) End If If IsError(ret) Then GetReturn = "" If opt Then ret = StrConv(f1 & " = " & ret, wFlg) GetReturn = Replace(ret, Space(1), Space(1), , , 1) Else GetReturn = StrConv(ret, wFlg) End If End Functionr
補足
コチラの思いをくみ取って頂きありがとうございます。 質問の仕方が曖昧で申し訳ございません A1に9×3= B1に= GetReturn(A1) と入力したのですが#NAME?と表示されます A2に8*9+3 B2に= GetReturn(A2,TRUE) と入力しても#NAME?と表示されます なぜなのでしょうか?
- shorun
- ベストアンサー率42% (133/310)
例えば計算問題 10+20+30= と答え 60 を別々のセルに表示するなら 添付図のように赤ペンで囲った式を入力すれば、表示できます。 ただし、A1,B1,C1のデータ入力なしで、D1に10+20+30=と表示させることはできません。 A1,B1,C1の各データが見かけ上邪魔なら データと式を全部入力してからABC列を非表示に設定する。 D1セルの式を左から順番に説明します。 (1) = は式の始めに必ず書く記号 (2) VALUE(A1) はセルA1の値(ここでは10)を返す式 (3) & は(2)と(3)を接続させる記号 (4) "+" は +記号をダブルコーテーションで囲って文字の+にする約束 (5) (3)参照 (6) VALUE(B1) はセルB1の値(ここでは20)を返す式 (7) (3)参照 (8) (4)参照 (9) VALUE(C1) はセルC1の値(ここでは30)を返す式 (10) (3)参照 (11) "=" は =記号をダブルコーテーションで囲って文字の=にする約束 E1セルの式(説明省略) 以上でマクロを使わず初歩的な関数で質問冒頭の「1つのセルで190+25+25= もう1つのセルで240と表示したい」のパターンは解決しますが 質問後半「4つの場合や9つの場合などマチマチで、かけ算や割り算があったりと なかなか同じ書式では無理なのです」まで読むと、IF関数を組み合わせれば不可能ではないかも知れませんが、複雑すぎるので私はここでパスします。 この先は、1行目で「計算問題 10+20+30=」と書きましたが どのような「計算問題」のパターンがあるのか補足に明記されて、マクロ関数の達人からの良い回答をおまちください。
- Wendy02
- ベストアンサー率57% (3570/6232)
#4まできても、回答者の回答で満足していないようですが、何かお困りのことがあって質問されていると思うのです。(以下、括弧はヒント) 当初、 >190+25+25=240 >このように1つのセルで190+25+25= もう1つのセルで240と表示したいのです >元の質問に、A7 =A1+A3+A5 240と表示 >この方法でもいいのですが (Formula を利用する) これを書いてしまったら、ミスリードするのは当然ですね。 #3さんの回答で正解だと思いましたので、アップしなかったのですが、最初から、自分の中できちんとまとめていたら、何日も質問は掛からなかったと思います。 #3の補足 >=A1+B1+C1と表示するのではなく >190+25+25と表示させたいのです (特殊) #4の補足 1つのセルに >190+25+25や1+2+3+4+5+6+7+8+9 >と入力して隣のセルか任意のセルに答えを表示できないのでしょうか? (Evaluateを利用する) その都度、質問の内容が変わっているようですが、質問として何をしたいのか、話をまとめてくださいませんか?もともと、何をするためにしているのですか?レイアウトさえ決まっていないようです。 最初から読んでみると、どう答えてよいのか分からなくなると思います。
- shinkami
- ベストアンサー率43% (179/411)
・一つのセルに[190+25+25]と入力するとそのまま表示されます ・これの右端に = を追加して[190+25+25=]これもOKですね ・これの左端に = を追加して[=190+25+25]は計算結果の240 が表示されます 左端に = を表示するにはシングルコーテーションに続いて['=190+25+25]と入力します '表示されませんのでご希望通りかと
補足
ありがとうございます。 1つのセルに 190+25+25や1+2+3+4+5+6+7+8+9 と入力して隣のセルか任意のセルに答えを表示できないのでしょうか?
- esupuresso
- ベストアンサー率44% (257/579)
「Alt」+「F11」でVBAを起動して「挿入」タブから「標準モジュール」を選択し、ユーザー定義関数を入力します ___________________________________________________________ Function 数式(rng As range) As String 数式 = rng.Formula End Function ___________________________________________________________ 添付画像を元に説明していきますが、数式を入力するセルはこの場合【E2】~【E5】としておき、【D2】に「=数式(E2)」と入力します 後は【D2】の式を【D5】までコピーします 一応画像を添付しておきましたが、こんな感じでよろしいでしょうか?
補足
早速ありがとうございます。 添付画像の数式D2~D5を =A1+B1+C1と表示するのではなく 190+25+25と表示させたいのです そもそも可能なのでしょうか? 分かる範囲で結構です教えて下さい。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAの方法になってしまいますが・・・ 掛け算の場合は「*」(アスタリクス)を入力・割り算の場合は「/」(スラッシュ)を入力になります。 A1セルから数行にデータがあり、「=」(イコール)の下の行に計算式を・その下の行に計算結果を表示するようにしてみました。 画面の左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 マクロ実行方法は Alt+F8キー → マクロ → 実行です。 Sub test() 'この行から Dim i As Long Dim str, buf As String i = 1 Do While Cells(i, 1) <> "=" str = Cells(i, 1) buf = buf & str i = i + 1 Loop Cells(Rows.Count, 1).End(xlUp).Offset(1) = buf & "=" Cells(Rows.Count, 1).End(xlUp).Offset(1) = "=" & buf Columns(1).AutoFit End Sub 'この行まで 以上、参考になれば良いのですが・・・m(__)m
一々手入力になって面倒かもしれませんが、 A1に、例えば 1+2-3×2÷4= と計算式を入力し、 答えを入力したいセルの数式バーに、 =1+2-3*2/4 と入れるしかないのではないでしょうか…。 あまり参考にならない答えで済みません; 参考URL http://www.becoolusers.com/excel/input-arithmetic.html
補足
ありがとうございます。 できました!!少し感動しています 他に方法があるなら是非教えて下さい。