2017-06-06 1 views
1

文字列として分数を数値に変換する方法はありますか?VBAの文字列の分数

strFrac = "3/2" 

現在分子と分母を得るために文字列を分割しています。

Dim x() As String 
x = Split(strFrac, "/") 

Val()を使用して分割します。

v = Val(x(0))/Val(x(1)) 

結果:V = 1.5

をより直接的なアプローチはありますか? Val("3/2")のようなものがうまくいけば良いでしょう。

答えて

2

Valから来ました。 は、数字以外の文字を検出したときに文字列の読み取りを停止し、文字列から抽出された数値を表すDoubleを返します。

あなたの目的には「うまくいく」と言われていますが、CDblの変換機能がより適切でしょう。

Excelの場合、Scott's answerは、Excelのコンピューティングエンジンを利用して文字通りEvaluateという文字列を使用します。これはあなたが探している文字列です。その副作用は、文字列にExcel関数とセル参照が含まれるようになり、結果が評価されることです。

評価でエラー値(例:Evaluate("12/0"))が返された場合は、結果をDoubleに直接割り当てるとタイプの問題が発生します。代わりにVariantに結果を割り当て、IsError関数を使用してエラーを返さないことを確認します。これは、実行時エラー13/"型の不一致"から解放されます。

あなたがExcelにいない場合は、それを行うことはできません。そのためにExcelオブジェクトモデルを参照したくないので、あなたのソリューションは本当に簡単です。

+1

OPの解決策の1つの問題は、 "1 5/16 "となる。これはOPの問題ではないかもしれませんが、完全性のために言及します。 –

+0

@BrianMStaffordが正しい。 OPの実装は非常に素朴です!私はそれがちょうど "仕事を終わらせる"と思う=) –

+0

@Brian、ユースケースは常に文字列としての単純な分数( "分子/分母")です。 – NOYB

2

あなたはここで、Excelオブジェクトモデルへのソリューションを結び付けたくない場合は、Application.Evaluate

Sub TEST() 
Dim v As Double 
Dim strFrac As String 
strFrac = "3/2" 
v = Application.Evaluate(strFrac) 
Debug.Print v 
End Sub 
+0

Excelのコンピューティングエンジンを利用するので、SUM(A:A)/ SUM(B:B)も評価されます。 OPの問題を解決するための最も簡単な方法です。一方で、コードをExcelオブジェクトモデルに結び付けます。 –

+1

'Evaluate'がエラー値に評価された場合、' v'への代入時に実行時エラー13が発生します; –

0

をしたいが、問題を解決する別の方法です。

Function Frac2Num(ByVal X As String) As Double 
    Dim P As Integer 
    Dim N As Double 
    Dim Num As Double 
    Dim Den As Double 

    X = Trim$(X) 
    P = InStr(X, "/") 

    If P = 0 Then 
     N = Val(X) 
    Else 
     Den = Val(Mid$(X, P + 1)) 
     If Den = 0 Then Error 11 ' Divide by zero 
     X = Trim$(Left$(X, P - 1)) 
     P = InStr(X, " ") 

     If P = 0 Then 
     Num = Val(X) 
     Else 
     Num = Val(Mid$(X, P + 1)) 
     N = Val(Left$(X, P - 1)) 
     End If 
    End If 

    If Den <> 0 Then 
     N = N + Num/Den 
    End If 

    Frac2Num = N 
End Function 

は、このソリューションは、本当に数値に文字列を変換しませんMicrosoftのWebサイトhttps://support.microsoft.com/en-us/help/185424/how-to-convert-a-fraction-to-a-decimal-number

関連する問題