Ich habe eine benutzerdefinierte Excell-Arbeitsblattfunktion(Linear) interpoliert aus einem Array von X und einem Array von Y-Werten bei einem definierten X1-Wert, was gut funktioniert. Ich habe versucht, diese Funktion in einer anderen Funktion (NPL im folgenden Beispielcode) zu verwenden, indem ich sie als private statische Funktion in einem VBA-Modul einsetze und dann die Funktion unter Verwendung von in der Funktion erstellten Datenfeldern aufrufe. Wenn ich dies in der Kalkulationstabelle verwende, erhalte ich den Fehler #WERT. Irgendwelche Ideen, was ich falsch mache?
Beispielcode:
Function NPL(Length, Beam)
A = Array(1, 2, 3, 4)
B = Array(2, 4, 6, 8)
C = Linear(A, B, 1.5)
NPL = C
End Function
Private Static Function Linear(X, Y, X1)
N = 0
I = 1
Do
N = I
I = I + 1
Loop Until X(I) < X(I - 1) Or N = X.Count
A = 0
I = 0
Do
I = I + 1
Loop Until X(I) > X1 Or I > N - 1
If X1 < X(N) And X1 > X(1) Then
Linear = Y(I - 1) + (X1 - X(I - 1)) * (Y(I) - Y(I - 1)) / (X(I) - X(I - 1))
ElseIf X1 > X(N) Or X1 = X(N) Then
Linear = Y(N)
Else
Linear = Y(1)
End If
End Function
Antworten:
2 für die Antwort № 1Ersetzen Sie Ihre
Do
N = I
I = I + 1
Loop Until X(I) < X(I - 1) Or N = X.Count
mit
Do
N = I
I = I + 1
Loop Until X(I) < X(I - 1) Or N = UBound(X) - LBound(X) + 1
Dies sollte für jedes 1D-Array funktionieren.