文字列として分数を数値に変換する方法はありますか?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")
のようなものがうまくいけば良いでしょう。
文字列として分数を数値に変換する方法はありますか?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")
のようなものがうまくいけば良いでしょう。
Val
から来ました。 は、数字以外の文字を検出したときに文字列の読み取りを停止し、文字列から抽出された数値を表すDouble
を返します。
あなたの目的には「うまくいく」と言われていますが、CDbl
の変換機能がより適切でしょう。
Excelの場合、Scott's answerは、Excelのコンピューティングエンジンを利用して文字通りEvaluate
という文字列を使用します。これはあなたが探している文字列です。その副作用は、文字列にExcel関数とセル参照が含まれるようになり、結果が評価されることです。
評価でエラー値(例:Evaluate("12/0")
)が返された場合は、結果をDouble
に直接割り当てるとタイプの問題が発生します。代わりにVariant
に結果を割り当て、IsError
関数を使用してエラーを返さないことを確認します。これは、実行時エラー13/"型の不一致"から解放されます。
あなたがExcelにいない場合は、それを行うことはできません。そのためにExcelオブジェクトモデルを参照したくないので、あなたのソリューションは本当に簡単です。
あなたはここで、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
Excelのコンピューティングエンジンを利用するので、SUM(A:A)/ SUM(B:B)も評価されます。 OPの問題を解決するための最も簡単な方法です。一方で、コードをExcelオブジェクトモデルに結び付けます。 –
'Evaluate'がエラー値に評価された場合、' v'への代入時に実行時エラー13が発生します; –
をしたいが、問題を解決する別の方法です。
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
OPの解決策の1つの問題は、 "1 5/16 "となる。これはOPの問題ではないかもしれませんが、完全性のために言及します。 –
@BrianMStaffordが正しい。 OPの実装は非常に素朴です!私はそれがちょうど "仕事を終わらせる"と思う=) –
@Brian、ユースケースは常に文字列としての単純な分数( "分子/分母")です。 – NOYB