質問番号: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
標準モジュールに記述

結果