Nicht ganz klar, ob du wirklich 'ne Fkt...
25.06.2009 17:42:13
Luc:-?
...schreiben willst, Marc,
denn du hast da Einiges missachtet, was ihr fkt bedingt...
1. Deklarationen: In der Kopfzeile/Argumentliste der Fkt wdn nur die Argumente und das Fktsergebnis, alle anderen Variablen wdn am Anfang des Fktskörpers deklariert. Bin jetzt mal davon ausgegangen, dass das alles wirklich Variablen sind, weil auch entsprechende Berechnungen existieren.
2. Fkts- vs Subproz: Eine Fkt gibt im Ggsatz zu einer Subproz einen bzw mehrere Werte zurück. Dazu müssen diese aber auch der Fkt zugewiesen wdn! Da nicht klar ist, welche Variable das Ergebnis liefern soll, habe ich die 3 letzten verwendet.
3. Sprachfalle: Die dt xlFkt haben im US-Original oft andere Namen. VBA verwendet letztere. Nur bei Ausgabe als TabBlattFml kannst du ...FormulaLocal dt Bezeichnungen zuweisen.
Eigene Fktt, sog userdefinedFunctions kann man im TabBlatt wie xlFktt einsetzen. Das ist in folgd Abb demonstriert. Deine udF macht allerdings nur als Matrixformel über 3 Zellen Sinn, denn sie gibt hier 3 Werte zurück. Einen einzelnen Wert kannst du mit xlFkt INDEX auswählen...
Deine udF habe ich also wie folgt ergänzt. Musst du selber wissen, ob das so OK ist...
Option Explicit
Function Test_dE2000(ByVal L1 As Double, ByVal L2 As Double, ByVal a1 As Double, _
ByVal a2 As Double, ByVal b1 As Double, ByVal b2 As Double) As Variant
Dim C1 As Double, C2 As Double, G As Double, a1STRICH As Double, a2STRICH As Double, _
b1STRICH As Double, b2STRICH As Double, C1STRICH As Double, C2STRICH As Double, _
h1STRICH As Double, h2STRICH As Double, mean_CSTRICH As Double, mean_hSTRICH As Double, _
_
deltah As Double
'--- Schritt 1
C1 = (a1 ^ 2 + b1 ^ 2) ^ 0.5
'--- Schritt 2
C2 = (a2 ^ 2 + b2 ^ 2) ^ 0.5
'--- Schritt 3
G = 0.5 * (1 - (((C1 + C2) / 2) ^ 7 / (((C1 + C2) / 2) ^ 7 + 25 ^ 7)) ^ 0.5)
'--- Schritt 4
a1STRICH = (1 + G) * a1
'--- Schritt 5
b1STRICH = b1
'--- Schritt 6
C1STRICH = (a1STRICH ^ 2 + b1STRICH ^ 2) ^ 0.5
'--- Schritt 7
'WENN(C12>0;GRAD(ARCTAN2(C11;C12));360+GRAD(ARCTAN2(C11;C12)))
With WorksheetFunction
h1STRICH = .Degrees(.Atan2(a1STRICH, b1STRICH)) - 360 * (b1STRICH > 0)
End With
'--- Schritt 8
a2STRICH = (1 + G) * a2
'--- Schritt 9
b2STRICH = b2
'--- Schritt 10
C2STRICH = (a2STRICH ^ 2 + b2STRICH ^ 2) ^ 0.5
'--- Schritt 11
'WENN(C21>0;GRAD(ARCTAN2(C20;C21));360+GRAD(ARCTAN2(C20;C21)))
With WorksheetFunction
h2STRICH = .Degrees(.Atan2(a2STRICH, b2STRICH)) - 360 * (a2STRICH > 0)
End With
'--- Schritt 12
mean_CSTRICH = (C1STRICH + C2STRICH) / 2
'--- Schritt 13
If Abs(h2STRICH - h1STRICH)
Option Explicit am Modulanfang bewirkt einen PgmStop, wenn eine Variable nicht deklariert ist. Der überflüssige einzelne Tiefstrich ist der Forumssoftware geschuldet — entfernen! Sicher kann man die udF noch straffen – manche Einzelschritte und zugehörige Variablen dürften überflüssig sein, wenn sie nicht auch im Fktsergebnis erscheinen –, aber wie gesagt, das musst du entscheiden...
Viel Erfolg, Luc :-?
PS: Dieses Mal stimmte die Netiquette... ;-)