我想创建一个函数,该函数将返回给定持续时间的分布的期望值。 输入将仅为以下格式 ExpValue(Jan-01/June30; EXPO(2000),July - 01/Dec-31; NORM(1000,2000)) 其中Jan-01/6月30日和7月 - 01/12月 - 31日是持续时间。 而且,EXPO(2000)和NORM(1000,2000)是该特定季节数据的分布类型(平均值,标准偏差等在括号中提供)。用户只需输入分配类型的起始4个字母,如: 正常分布的NORM EXPOENTIALAL分配的EXPO等 可以有尽可能多的季节,用“,”和持续时间类型对于每个季节分别提到的与“......”隔开的时间段。VBA-创建用户自定义函数
我写了该函数的代码,但它不工作。请建议我进行必要的更改。
Public Function ExpValue(str As String) As String
Dim Mylen As Integer
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Double
Dim N As Integer
Dim ExpectValue As Double
Dim Arr1() As String
Dim Arr2() As String
Dim Arr3() As String
Dim Arr4() As String
Dim Arr5() As String
Dim Arr6() As String
Dim Arr7() As Double
Dim txt1 As String
Dim txt2 As String
Dim txt3 As String
Dim txt4 As String
Dim txt5 As String
Dim txt6 As String
Arr1() = Split(str, ",")
C = UBound(Arr1())
ReDim Arr1(C) As String
For i = 0 To C
Arr2() = Split(Arr1(i), ";")
ReDim Arr2(1) As String
Arr3(i) = Arr2(0)
Arr4(i) = Arr2(1)
Next i
ReDim Arr3(C) As String
ReDim Arr4(C) As String
For i = 0 To C
txt1 = Arr4(i)
Mylen = Len(txt1)
txt2 = Left(txt1, 4) ' type of distribution
A = Mylen - 5
B = Mylen - 6
txt3 = Right(txt1, A) ' 1,2.3,4,...)
txt4 = Left(txt3, B) ' 1,2.3,4.,..
Arr5 = Split(txt4, ",")
D = UBound(Arr5())
ReDim Arr7(D) As Double
For j = 0 To D
Arr7(i) = CDbl(Arr5(i))
Next j
Select Case txt2
Case "EXPO", "POIS" ' just one number EXPO(2.34)
l = CDbl(txt4) ' txt4=2.34
Arr6(i) = l
Case "NORM"
ExpectValue = Arr7(1)
Arr6(i) = ExpectValue
Case "BETA"
ExpectValue = (Arr7(1)/(Arr7(0) + Arr7(1)))
Arr6(i) = ExpectValue
Case "GAMM"
ExpectValue = Arr7(0) * Arr7(1)
Arr6(i) = ExpectValue
Case "TRIA"
ExpectValue = ((Arr7(0) + Arr7(1) + Arr7(2))/3)
Arr6(i) = ExpectValue
Case "UNIF"
ExpectValue = ((Arr7(0) + Arr7(1))/2)
Arr6(i) = ExpectValue
Case "LOGN"
ExpectValue = Exp((Arr7(0) + ((Arr7(1))^2))/2)
Arr6(i) = ExpectValue
Case "ERLA"
ExpectValue = Arr7(0) * Arr7(1)
Arr6(i) = ExpectValue
End Select
'Next j
Next i
'i = i + 1
If C = 0 Then
txt6 = Arr3(0) & ";" & Arr6(0)
Else
txt6 = ""
For i = 0 To C
txt6 = txt6 & "," & Arr3(i) & "," & Arr6(i)
Next i
End If
ExpValue = txt5
End Function
给我们提示 - 这是什么问题?错误?错误的输出? –
问题是m无法运行工作表中的代码。我可能需要适当地重新定义该功能。我认为问题在于,如何以上述方式提供意见。编译器将“;”作为声明的结尾,根据我是字符串的一部分.. – Rachit
那么你需要将所有内容都包含在引号中:= ExpValue(“Jan - 01/June30; EXPO(2000),July - 01/Dec- -31; NORM(1000,2000)“) –