質問番号:1471574675
http://q.hatena.ne.jp/1471574675
Excelの特定のセルで計算を行いたいが同時に日本語も入れたい
今、C20セル〜から数行に渡り、営業費8,000円×30=
管理費5,000円×20=
撮影費1,000円×15=
・
・
・
と、計算を含む文字列が入っております。
上記の費用の計算結果を、D20セル以下に表記したいのですが。余計な日本語や全角の記号(×や=)が混じっているので、単純にセルに“=”を入れて掛算式を入れても、うまく計算ができないです。
しかし書類の仕様上、それらの日本語を消すことも出来ない状況です。
日本語の●●費等を残しつつも、C列に計算式を入れて、同時に計算結果をD列に反映するような妙案はないでしょうか。
よろしくお願い致します。
汎用性を持たせる為に、数字、小数点、演算子に全角・半角が混在していても計算する様にしました。
プログラム
Option Explicit Function StrToFormula(ByVal Str As String) As Variant Dim FirstNo As Variant ' 第一引数 Dim SecondNo As Variant ' 第二引数 Dim Operator As String ' 演算子 Dim Flag As Boolean Dim lp As Integer ' コンマを削除 Str = Replace(Str, ",", "") ' 演算子抽出 Flag = True If InStr(Str, "+") > 0 Or InStr(Str, "+") > 0 Then Operator = "+" Str = Replace(Str, "+", ",") Str = Replace(Str, "+", ",") ElseIf InStr(Str, "−") > 0 Or InStr(Str, "-") > 0 Then Operator = "-" Str = Replace(Str, "−", ",") Str = Replace(Str, "-", ",") ElseIf InStr(Str, "×") > 0 Or InStr(Str, "*") > 0 Then Operator = "*" Str = Replace(Str, "×", ",") Str = Replace(Str, "*", ",") ElseIf InStr(Str, "÷") > 0 Or InStr(Str, "/") > 0 Then Operator = "/" Str = Replace(Str, "÷", ",") Str = Replace(Str, "/", ",") Else Flag = False End If ' 演算子が無い If Flag = False Then StrToFormula = "" Exit Function End If '演算子で分割 FirstNo = Split(Str, ",")(0) SecondNo = Split(Str, ",")(1) ' 数字と小数点以外の文字を空白に変換した後、削除 For lp = 1 To Len(FirstNo) If (Mid(FirstNo, lp, 1) >= "0" And Mid(FirstNo, lp, 1) <= "9") = False And _ (Mid(FirstNo, lp, 1) >= "0" And Mid(FirstNo, lp, 1) <= "9") = False And _ (Mid(FirstNo, lp, 1) = "." And Mid(FirstNo, lp, 1) = ".") = False Then Mid(FirstNo, lp, 1) = " " End If Next lp FirstNo = StrConv(Replace(FirstNo, " ", ""), vbNarrow) For lp = 1 To Len(SecondNo) If (Mid(SecondNo, lp, 1) >= "0" And Mid(SecondNo, lp, 1) <= "9") = False And _ (Mid(SecondNo, lp, 1) >= "0" And Mid(SecondNo, lp, 1) <= "9") = False And _ (Mid(SecondNo, lp, 1) = "." And Mid(SecondNo, lp, 1) = ".") = False Then Mid(SecondNo, lp, 1) = " " End If Next lp SecondNo = StrConv(Replace(SecondNo, " ", ""), vbNarrow) ' 抽出した数字と演算子で計算 Select Case Operator Case "+" StrToFormula = Val(FirstNo) + Val(SecondNo) Case "-" StrToFormula = Val(FirstNo) - Val(SecondNo) Case "*" StrToFormula = Val(FirstNo) * Val(SecondNo) Case "/" StrToFormula = Val(FirstNo) / Val(SecondNo) End Select End Function