[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『一つのセルの中の計算式の答えを別のセルに表示する』(山海猿)
A B C D E 1 a×b+(c+d) = Ans
上記のようなときA1に算式を表示させておきE1に答えを表示させる場合にE1にどのように入力すると自動計算してくれるのですか?
たくさん過去ログがありますよ。 (純丸)(o^-')b [[20051027235051]] 『A1のセルに式をB1のセルに答えを…』(のなか) [[20051006180417]] 『文字列を計算式へ』(box) [[20050211090552]] 『計算式の表示と答えの表示』(やす) [[20040920110048]] 『マクロを使わずに関数だけで』(うーん) [[20040707170516]] 『計算結果を隣のセルに表す方法は?』(たろ) [[20040131111956]] 『セル内の和』(mutsu) [[20031224165448]] 『計算結果を別のセルに表示する』(toshi)
例えば{5+10÷(4+1)}÷2 等という式でもやっつけてしまう関数! 標準モジュールにコピペ =newcalc(a1)といった塩梅に入力 昔どっかで拾うた関数ですけど、ルートの計算が上手い事いかんみたい(笑 余力のある方は完成させてくらはい。 (弥太郎)
'-------------------------------- Option Explicit
Private str_data As String Private str_dataType As Integer '1:hugou 2:num 3:function Private st As String Private stLen As Integer Private GP As Integer Private kacco As Integer Const hugou As String = "+-*/()^" Const num As String = "0123456789" Const rad As Double = 57.2957795130823 '------------------------------------- Function Newcalc(data As String) As Double
data = StrConv(data, vbNarrow) data = StrConv(data, vbLowerCase)
data = Replace(data, " ", "") data = Replace(data, "×", "*") data = Replace(data, "÷", "/") data = Replace(data, "=", "") data = Replace(data, "√", "sqrt") data = Replace(data, ",", "") data = Replace(data, "{", "(") data = Replace(data, "}", ")") data = Replace(data, "[", "(") data = Replace(data, "]", ")") data = Replace(data, "π", "3.14159265358979") data = Replace(data, "pi", "3.14159265358979") data = Replace(data, "rad", "57.2957795130823")
kacco = 0 GP = 1 st = data stLen = Len(st)
Getstr_data Newcalc = sub1(0#) If (kacco <> 0) Then MsgBox "カッコの指定に誤りがあります。" _ , vbOKOnly + vbExclamation, "Newcalc" Newcalc = 1 / 0 End If End Function '---------------------------------------- Function sub1(Value As Double) As Double ' 加算・減算の処理
Dim Value2 As Double Dim str_data2 As String
Value = sub2(Value) While str_data = "+" Or str_data = "-" str_data2 = str_data Getstr_data Value2 = sub2(Value2) Select Case str_data2 Case "+" Value = Value + Value2 Case "-" Value = Value - Value2 End Select Wend sub1 = Value End Function '----------------------------------- Function sub2(Value As Double) As Double ' 乗算、除算の処理
Dim Value2 As Double Dim str_data2 As String
Value = sub3(Value) While str_data = "*" Or str_data = "/" str_data2 = str_data Getstr_data Value2 = sub3(Value2) Select Case str_data2 Case "*" Value = Value * Value2 Case "/" Value = Value / Value2 End Select Wend sub2 = Value End Function '------------------------------------ Function sub3(Value As Double) As Double ' べき乗の処理
Dim Value2 As Double Dim str_data2 As String
Value = sub4(Value) While str_data = "^" str_data2 = str_data Getstr_data Value2 = sub4(Value2) Select Case str_data2 Case "^" Value = Value ^ Value2 End Select Wend sub3 = Value End Function '--------------------------------- Function sub4(Value As Double) As Double ' 単項演算子の処理
Dim str_data2 As String
If str_data = "+" Or str_data = "-" Then str_data2 = str_data Getstr_data End If Value = sub5(Value) If str_data2 = "-" Then Value = -Value End If sub4 = Value End Function '-------------------------------- Function sub5(Value As Double) As Double ' カッコの処理
If str_data = "(" Then Getstr_data Value = sub1(Value) Getstr_data Else Value = Atom() End If sub5 = Value End Function '------------------------------- Function Atom() As Double ' 数値の処理
Dim temp As String Dim i As Integer Dim Value2 As Double
If str_dataType = 3 Then Atom = Func(str_data) ElseIf str_dataType = 2 Then Atom = Val(str_data) Getstr_data End If
End Function '---------------------------------- Function Func(str As String) As Double '算術関数の処理
Dim Value2 As Double Dim str2 As Double
Select Case str Case "sin" Getstr_data Value2 = sub4(Value2) Func = Sin(Value2 / rad) Case "cos" Getstr_data Value2 = sub4(Value2) Func = Cos(Value2 / rad) Case "tan" Getstr_data Value2 = sub4(Value2) Func = Tan(Value2 / rad) Case "asin" Getstr_data Value2 = sub4(Value2) Func = WorksheetFunction.Asin(Value2) * rad Case "acos" Getstr_data Value2 = sub4(Value2) Func = WorksheetFunction.Acos(Value2) * rad Case "atan" Getstr_data Value2 = sub4(Value2) Func = Atn(Value2) * rad Case "abs" Getstr_data Value2 = sub4(Value2) Func = Abs(Value2) Case "int" Getstr_data Value2 = sub4(Value2) Func = Int(Value2) Case "exp" Getstr_data Value2 = sub4(Value2) Func = Exp(Value2) Case "log" Getstr_data Value2 = sub4(Value2) Func = Log(Value2) Case "sqrt" Getstr_data Value2 = sub4(Value2) Func = Sqr(Value2) Case Else MsgBox "関数 " + str + " は定義されていません." _ , vbOKOnly + vbExclamation, "Newcalc" Func = 1 / 0 End Select
End Function '-------------------------------- Function Getstr_data()
Dim i As Integer
If GP > stLen Then str_data = "" Exit Function End If
If InStr(hugou, Mid(st, GP, 1)) <> 0 Then str_data = Mid(st, GP, 1) str_dataType = 1 GP = GP + 1 If str_data = "(" Then '括弧のチェック kacco = kacco + 1 ElseIf str_data = ")" Then kacco = kacco - 1 End If ElseIf InStr(num, Mid(st, GP, 1)) <> 0 Then For i = GP To stLen If InStr(hugou, Mid(st, i, 1)) <> 0 Then Exit For End If Next str_data = Mid(st, GP, i - GP) str_dataType = 2 GP = i Else For i = GP To stLen If InStr(hugou, Mid(st, i, 1)) <> 0 Then Exit For End If Next str_data = Mid(st, GP, i - GP) str_dataType = 3 GP = i End If
End Function
皆さんありがとうございました。初心者なので大変助かりました。またご教授お願いします。 (山海猿)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.