目的:別のプラットフォームおよびユーザによって入力された2つの分数をとり、IsNothing
で評価します。それらが整数または変換可能な文字列でない場合は、Frac2Num
を介して実行します(このコードは、Arecon DataのJeff Armsによって作成されたものです)。分数を整数に変換し、if文で除算してゼロのみを返します
次に、値A2が1より大きいかどうかを確認します。そうであれば、数学関数(A2/2) - (A1/2)を実行し、その値を返します。それ以外の場合は0を返します。
これまでのところ、0を返すことしかできませんでした。値を読み取る方法や、数式の後の値を返す方法が何であれ、私は思っています。
主な機能:
Public Function MyFunction(ByVal A1 As String, ByVal A2 As String) As Integer
MyFunction= 0
Try
Dim B1 As Double
Dim B2 As Double
If IsNothing(A1) Then Return 0 'If the user provides no values, return 0.
If IsNothing(A2) Then Return 0 'If the user provides no values, return 0.
If IsNumeric(A1) = True Then
B1 = CDbl(A1)
Else
B1 = Frac2Num(A1)
End If 'If the value is an integer or convertible string, convert value to double. If not, run through Frac2Num function.
If IsNumeric(A2) = True Then
B2 = CDbl(A2)
Else
B2 = Frac2Num(A2)
End If
If A2 > 1 Then
MyFunction= (A2/2) - (A1/2)
Return MyFunction
Else MyFunction= 0
End If 'If A2 is greater than one, then MyFunction = value created by equation.
Catch ex As Exception
End Try
Frac2Num機能:
Function Frac2Num(ByVal X As String) As Double
Dim P As Integer, N As Double, Num As Double, 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
が戻る:すべての
Sub Main()
Dim result As Integer
result = MyFunction("8 1/2", "8 5/8") 'Function called with example values.
Console.WriteLine(result)
Console.ReadLine()
End Sub
あなたはロジックが表示されます場所を確認してステッピングしようとしましたか?最初の質問には、IsNumericは複合(複合)分数でtrueを返しますか? CDBLは同じ値で動作しますか?また、このコードは.NETよりVBA-ishの方が多く見えます。 – Jeremy