- ベストアンサー
文字データーを計算させたい
質問させていただきます よろしくお願します。 周りの人に聞いてもむりだと言われたのですが 一つのセルの中に (たとえば) 30000×6÷0.53と文字として入力し、その答えを(339,623)隣のセルに円未満四捨五入して出したいと思っているのですがうまくいきません いつも電卓を片手にエクセルに入力しているので 何とかしたいと思っているのですが 質問して無理だと言ってくださればあきらめもつきます よろしくお願します。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数を使用する方法ですが、もし、これで宜しかったら次の手順で テストしてみてください。 ■ 操作手順 1.Alt + F11 または、メニューから[ツール] --> [マクロ]--> [Visual Basic Editor] をクリックします。 2.メニューから [挿入]--> [標準モジュール] をクリックします。 3.モジュールウィンドウに下記コード(6行)をコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 これで STRENZAN 関数が使用できます。 ( + や- も使えます。全角でもOK) セルA1に 30000×6÷0.53 を入力します。 例えば、セルB1に =ROUND(STRENZAN(A1),0) の計算式を設定します。 これで B1には、文字列の演算結果を四捨五入し、339623 が表示されます。 Function StrEnzan(Shiki As String) As Variant Shiki = Replace(Shiki, "×", "*") Shiki = Replace(Shiki, "÷", "/") StrEnzan = Application.Evaluate(Shiki) Application.Volatile End Function
その他の回答 (9)
- fever
- ベストアンサー率43% (32/73)
A1に30000×6÷0.53という文字が入っているとして =LEFT(A1,FIND("×",A1)-1)*MID(A1,FIND("×",A1)+1,SEARCH("÷",A1)-SEARCH("×",A1)-1)/RIGHT(A1,LEN(A1)-FIND("÷",A1)) このセルの書式を、『数値/小数点以下の桁数:0/桁区切り(,)を使用する』にすれば、宜しいかと思います。
お礼
お答え有難うございました。 関数でもできるのですね・・ 有難うございまた。 LEFTとかMIDは使ったことがあったのですが これだけたくさん使うと頭の中が混乱しそうです。 でも勉強したいと思います。 feverさんそしてお答えくださった皆様に感謝です。 有難うございました。
- comv
- ベストアンサー率52% (322/612)
こんばんは A1に 30000×6÷0.53 と記載があり B1に計算結果を表示させるのであれば ・B1を選択 ・メニューの 挿入 名前 定義 名前の欄に適当な名前 (例 siki) 参照範囲欄に =EVALUATE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("="&A1,"+","+"),"-","-"),"×","*"),"÷","/"))+NOW()*0 ・B1に式 =ROUND(siki,0)
補足
有難うございました うまくできました。 挿入 名前 定義 ですか・・・ はじめて知りました。 過去の質問の中にもでていましたが 自分で質問しなければ、どこにあるのかすら分かりませんでした。 定義を勉強してみたいのですが普通のエクセルの本に載っているのでしょうか? エクセルは奥が深いです 本当に有難うございました。
- papayuka
- ベストアンサー率45% (1388/3066)
やはりマクロかな? 選択して実行すると、隣りのセルに答えを出します。 Sub myCalc() Dim r As Range For Each r In Selection With Application.WorksheetFunction s = .Substitute(r.Text, "×", "*") s = .Substitute(s, "÷", "/") s = .Substitute(s, "+", "+") s = .Substitute(s, "-", "-") r.Offset(0, 1).NumberFormat = "#,##0" r.Offset(0, 1).Value = "=round(" & s & ",0)" End With Next r End Sub
お礼
有難うございました。 すごいです。 VBAてほんとにすごいです。 これで電卓から開放されます。 papayukaサン本当にありがとうございます。 またよろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
シートのChangeイベントに下記を貼りつけ。 A列へ全角で数*数/数の順序で入する。*/はこの順序で必ず入力するものとする。B列に答え、C列に四捨五入値が入ります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then s = StrConv(Target, vbNarrow) s = Replace(s, "*", ",") s = Replace(s, "/", ",") p = Split(s, ",") MsgBox p(0) MsgBox p(1) MsgBox p(2) Cells(Target.Row, 2) = p(0) * p(1) / p(2) Cells(Target.Row, 3) = WorksheetFunction.Round(Cells(Target.Row, 2), 0) End If End Sub こんなに複雑になると言う例で上げます。
お礼
すいませんでした。 質問の仕方が悪かったです。 -も入りますし+も入ります 6000×9000÷0.82+800となることもあります すいません。 質問に対し考えて頂いたこと 本当に有難うございました。
- losedog
- ベストアンサー率66% (22/33)
計算式が、常に A×B÷C という条件であれば、 計算式がA1のセルに入力されている場合は、B1のセルに =ROUND(LEFT(A1,FIND("×",A1,1)-1)*MID(A1,FIND("×",A1,1)+1,FIND("÷",A1,1)-FIND("×",A1,1)-1)/MID(A1,FIND("÷",A1,1)+1,LEN(A1)-FIND("÷",A1,1)),0) と入力すれば、計算できます。
補足
答えていただいて有難うございます。 計算式が、常に A×B÷C という条件ではないのです。 質問の仕方がだめでした A×B×C もありますし A-B÷Cみたいなのもあります。 すいませんでした
- gatyan
- ベストアンサー率41% (160/385)
標準の機能だけでどうしても数式入力をしたいのなら、マクロを使うとある程度のことはできます。(お望みのこととは違うと思いますが) Sub calc(f As String, t As String) Range(t).FormulaLocal = "=" & Range(f).Text End Sub という関数を用意します。次にボタンを作成してボタンのコードに Sub ボタン1_Click() Call calc("a1", "c1") End Sub のように書きます。(A1のセルに入っている式を計算した結果がC1に表示されるように見えます。C1には値ではなく、式が入ります) "a1"が式が入っているセルの名前 "c1"が値(実際は式)を入れるセルの名前です。 いくつもある場合は、Call calc(...)を並べます。 きちんとした式になっていないとエラーになりますが。
お礼
質問に答えていただいて有難うございます 仕事から帰りしだいやってみます。 たくさんの皆さんに回答していただきましたので 期待が持てました 有難うございます。
- imogasi
- ベストアンサー率27% (4737/17069)
=30000*6/0.53と=を最初に入れ掛ける×は*、割る÷は/で置きかえればどうでしょうか。そのとなりのセルに =ROUND(A1,0)と入れる。 これではダメな事情があリますか。全文字全角で入力しても数字・演算記号に直してくれるようですが。
お礼
imogasi様 質問に答えていただき有難うございました。 質問の仕方が悪くご迷惑お掛けしましたが みなさまのご協力でうまくできるようになりました。 又何かありましたら、よろしくお願します。
- ranx
- ベストアンサー率24% (357/1463)
文字列を読んで計算する関数をマクロで作って 呼び出すというのはダメかな。
お礼
ranx様 質問に答えていただき有難うございました。 質問の仕方が悪くご迷惑お掛けしましたが みなさまのご協力でうまくできるようになりました。 又何かありましたら、よろしくお願します。
- hinebot
- ベストアンサー率37% (1123/2963)
直接は無理ですが、間接的にならできます。 間接的というのは、以下のような意味です。 例) セルD1に 30000(数値で入力) セルD2に 6(数値で入力) セルD3に 0.53(数値で入力) セルA1(30000×6÷0.53と表示させる)に =D1&"×"&D2&"÷"&D3 と入力。 セルB1(計算結果を表示させる) =ROUND(D1*D2/D3,0) と入力。 ついでに、セルB1に対して、セルの書式設定の表示形式で、ユーザー定義を選び、種類を「(#,##0)_ 」とすれば (339,623)の表示になります。
お礼
質問に答えていただいて有難うございます 仕事から帰りしだいやってみます。 たくさんの皆さんに回答していただきましたので 期待が持てました 有難うございます。
お礼
お答え有難うございました。 うーん・・・すごすぎて自分には何がなにやらわかりませんがja7awuサンの言われたとおりに進んでいくとうまくできました。 ありがとうございます。 初心者でもわかる丁寧なお答え本当に有難うございました。 又よろしくお願いします。