Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nebenwerte aus Function

Nebenwerte aus Function
29.12.2018 21:12:05
Al
Abend zusammen,
Kann man aus dem folgenden Function-Modul auch Zwischenwerte ausgeben?
Option Explicit

Public Function BDKL(h, b, t, iy, iu, Iyy, iz, iv, Iuu, A, ey, _
IT, fyk, ez, fuk, zM, Iw, Aeff, sy, sv, tsbw As Double) As Double
Dim iP, iM, c2, lamT, lamTq, pi, E, phiT, kappaT, GK As Double
pi = Application.WorksheetFunction.pi()
E = 210000
iP = Sqr((iu) ^ 2 + (iv) ^ 2)
iM = Sqr((zM) ^ 2 + (iP) ^ 2)
c2 = (Iw + 0.039 * (sv) ^ 2 * IT) / Iuu
lamT = WorksheetFunction.Min(sv / iy, sv / iu) * Sqr((c2 + (iM) ^ 2) / (2 * c2) * _
(1 + Sqr(1 - 4 * (c2 * (iP) ^ 2) / (c2 + (iM) ^ 2) ^ 2)))
lamTq = lamT / (pi * Sqr(E / fyk * A / Aeff))
phiT = 0.5 * (1 + 0.49 * (lamTq - 0.2) + (lamTq) ^ 2)
If lamTq  0.2 Then kappaT = WorksheetFunction.Min(1 / (phiT + Sqr((phiT) ^ 2 - (lamTq) ^ 2) _
_
_
), 1)
GK = Aeff * fyk * kappaT / tsbw / 10
BDKL = GK
End Function

Der Rückgabewert der Funktion ist ja GK. Gibt es eine Möglichkeit auch beispielsweise iP in einer anderen Zelle ausgeben zu lassen?
Es geht mir darum den Benutzer auch die Zwischenwerte einsehen lassen zu können.
Gruss
Al

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nebenwerte aus Function
29.12.2018 21:23:23
onur
Eine Funktion, ein Ausgabewert.
Schreibst du halt eine 2. Funktion, die identisch ist, bis auf den Namen (z.B. BDKL2) und der Zeile:
BDKL = GK
AW: Nebenwerte aus Function
29.12.2018 21:28:42
Al
Das habe ich mir auch überlegt.
Danke für die schnelle Antwort.
AW: Nebenwerte aus Function
29.12.2018 21:23:49
Nepumuk
Hallo,
nein das geht nicht. Benutzerdefinierte Funktionen können wie "normale" Formeln nur die Zelle ändern in der sie stehen.
Gruß
Nepumuk
AW: Nebenwerte aus Function
29.12.2018 21:32:26
Al
Mhm, dachte ich mir schon.
Danke für die schnelle Antwort.
AW: Nebenwerte aus Function
29.12.2018 21:59:14
Nepumuk
Hallo,
jetzt ist mir doch noch was eingefallen.
Definiere die Variablen der Nebenwerte als Private Variablen auf Modulebene und gib dies in eigenen Funktionen an die Tabelle zurück.
Ein Beispiel:
 AB
14444
2999 
3666 

ZelleFormel
A1=test1(B1)
A2=Test2()
A3=Test3()

Option Explicit

Private A2 As Long, A3 As Long

Public Function Test1(x As Range) As Long
    Test1 = x.Value
    A2 = 999
    A3 = 666
End Function

Public Function Test2() As Long
    Test2 = A2
End Function

Public Function Test3() As Long
    Test3 = A3
End Function

Gruß
Nepumuk
Anzeige
AW: Nebenwerte aus Function
29.12.2018 22:47:15
Nepumuk
Nochmal Hallo,
damit die Ausgabe der Zwischenergebnisse zuverlässiger funktioniert, ändere sie so:
Option Explicit

Private A2 As Long, A3 As Long

Public Function Test1(x As Range) As Long
    Test1 = x.Value
    A2 = x.Value * 3
    A3 = x.Value * 5
End Function

Public Function Test2() As Long
    Application.Volatile
    Test2 = A2
End Function

Public Function Test3() As Long
    Application.Volatile
    Test3 = A3
End Function

Gruß
Nepumuk
Anzeige
Das geht durchaus, ...
30.12.2018 00:28:38
Luc:-?
Artificial Intelligence,
wenn du alle Werte, die ausgegeben wdn sollen, zuvor in ein Array lädst und dieses dann der UDF zuweist. Um dann alle diese Werte in Xl abzubilden, muss natürlich eine plurale MatrixFml verwendet wdn oder die Werte einzeln unter Zuhilfenahme von INDEX durch Fml-Ziehen ausgegeben wdn.
Plurale MatrixFml:
horizontal: {=TestWerteVektor()}
vertikal: {=TestWerteVektor(1)}
Normale EinzelFmln:
horizontal: =INDEX(TestWerteVektor();SPALTE(A1))
vertikal: =INDEX(TestWerteVektor(1);ZEILE(A1))
Demo-Bsp-UDF:
Function TestWerteVektor(Optional ByVal vertikal As Boolean)
Dim a, b, c, d
a = 1: b = 2: c = 3: d = 4
If vertikal Then
TestWerteVektor = Array(Array(a), Array(b), Array(c), Array(d))
Else: TestWerteVektor = Array(a, b, c, d)
End If
End Function
Gruß & GutRutsch! Luc :-?
PS: Man kann unter VBA-Einsatz auch eine Fml veranlassen, Daten an andere Zellen zu senden, aber das wäre hier ja gar nicht nötig. Bin dann mal weg… (bis zum Neuen)
Anzeige
AW: Nebenwerte aus Function
30.12.2018 11:20:26
Daniel
Hi
Füge der Funktion einen weiteren Parameter hinzu, in welchem du angibst, welchen Wert du als Ergebnis sehen willst und entscheide am Schluss anhand dieses Wertes welche Variable du als Ergebnis verwendest:
       Public Function BDKL(ergebnistyp as string ,h, b, t, iy, iu, Iyy, iz, iv, Iuu, A, ey, _
IT, fyk, ez, fuk, zM, Iw, Aeff, sy, sv, tsbw As Double) As Double
Dim iP, iM, c2, lamT, lamTq, pi, E, phiT, kappaT, GK As Double
pi = Application.WorksheetFunction.pi()
E = 210000
iP = Sqr((iu) ^ 2 + (iv) ^ 2)
iM = Sqr((zM) ^ 2 + (iP) ^ 2)
c2 = (Iw + 0.039 * (sv) ^ 2 * IT) / Iuu
lamT = WorksheetFunction.Min(sv / iy, sv / iu) * Sqr((c2 + (iM) ^ 2) / (2 * c2) * _
(1 + Sqr(1 - 4 * (c2 * (iP) ^ 2) / (c2 + (iM) ^ 2) ^ 2)))
lamTq = lamT / (pi * Sqr(E / fyk * A / Aeff))
phiT = 0.5 * (1 + 0.49 * (lamTq - 0.2) + (lamTq) ^ 2)
If lamTq  0.2 Then kappaT = WorksheetFunction.Min(1 / (phiT + Sqr((phiT) ^ 2 - ( _
lamTq) ^ 2) _
_
_
), 1)
GK = Aeff * fyk * kappaT / tsbw / 10
select case ergebnistyp
case "GK"
BDKL = GK
case "iP"
BDKL = iP
case "iM"
BDKL = iM
end select
End Function

beim Verwenden der Funktion musst du dann angeben, welches Ergebnis du sehen willst:
=BDKL("GK";1;2;...)

beachte weiterhin, dass in VBA jeder Variable einzeln ihr Typ zugewiesen werden muss:
DIM x, y, z as long

deklariert nur z als Long und x, y als variant.
sollen alle drei long sein, musst du schreiben:
dim x as Long, y as Long, z as long
gruß Daniel
Anzeige
AW: Nebenwerte aus Function
30.12.2018 11:20:26
Daniel
Hi
Füge der Funktion einen weiteren Parameter hinzu, in welchem du angibst, welchen Wert du als Ergebnis sehen willst und entscheide am Schluss anhand dieses Wertes welche Variable du als Ergebnis verwendest:
       Public Function BDKL(ergebnistyp as string ,h, b, t, iy, iu, Iyy, iz, iv, Iuu, A, ey, _
IT, fyk, ez, fuk, zM, Iw, Aeff, sy, sv, tsbw As Double) As Double
Dim iP, iM, c2, lamT, lamTq, pi, E, phiT, kappaT, GK As Double
pi = Application.WorksheetFunction.pi()
E = 210000
iP = Sqr((iu) ^ 2 + (iv) ^ 2)
iM = Sqr((zM) ^ 2 + (iP) ^ 2)
c2 = (Iw + 0.039 * (sv) ^ 2 * IT) / Iuu
lamT = WorksheetFunction.Min(sv / iy, sv / iu) * Sqr((c2 + (iM) ^ 2) / (2 * c2) * _
(1 + Sqr(1 - 4 * (c2 * (iP) ^ 2) / (c2 + (iM) ^ 2) ^ 2)))
lamTq = lamT / (pi * Sqr(E / fyk * A / Aeff))
phiT = 0.5 * (1 + 0.49 * (lamTq - 0.2) + (lamTq) ^ 2)
If lamTq  0.2 Then kappaT = WorksheetFunction.Min(1 / (phiT + Sqr((phiT) ^ 2 - ( _
lamTq) ^ 2) _
_
_
), 1)
GK = Aeff * fyk * kappaT / tsbw / 10
select case ergebnistyp
case "GK"
BDKL = GK
case "iP"
BDKL = iP
case "iM"
BDKL = iM
end select
End Function

beim Verwenden der Funktion musst du dann angeben, welches Ergebnis du sehen willst:
=BDKL("GK";1;2;...)

beachte weiterhin, dass in VBA jeder Variable einzeln ihr Typ zugewiesen werden muss:
DIM x, y, z as long

deklariert nur z als Long und x, y als variant.
sollen alle drei long sein, musst du schreiben:
dim x as Long, y as Long, z as long
gruß Daniel
Anzeige
AW: Nebenwerte aus Function
30.12.2018 11:20:28
Daniel
Hi
Füge der Funktion einen weiteren Parameter hinzu, in welchem du angibst, welchen Wert du als Ergebnis sehen willst und entscheide am Schluss anhand dieses Wertes welche Variable du als Ergebnis verwendest:
       Public Function BDKL(ergebnistyp as string ,h, b, t, iy, iu, Iyy, iz, iv, Iuu, A, ey, _
IT, fyk, ez, fuk, zM, Iw, Aeff, sy, sv, tsbw As Double) As Double
Dim iP, iM, c2, lamT, lamTq, pi, E, phiT, kappaT, GK As Double
pi = Application.WorksheetFunction.pi()
E = 210000
iP = Sqr((iu) ^ 2 + (iv) ^ 2)
iM = Sqr((zM) ^ 2 + (iP) ^ 2)
c2 = (Iw + 0.039 * (sv) ^ 2 * IT) / Iuu
lamT = WorksheetFunction.Min(sv / iy, sv / iu) * Sqr((c2 + (iM) ^ 2) / (2 * c2) * _
(1 + Sqr(1 - 4 * (c2 * (iP) ^ 2) / (c2 + (iM) ^ 2) ^ 2)))
lamTq = lamT / (pi * Sqr(E / fyk * A / Aeff))
phiT = 0.5 * (1 + 0.49 * (lamTq - 0.2) + (lamTq) ^ 2)
If lamTq  0.2 Then kappaT = WorksheetFunction.Min(1 / (phiT + Sqr((phiT) ^ 2 - ( _
lamTq) ^ 2) _
_
_
), 1)
GK = Aeff * fyk * kappaT / tsbw / 10
select case ergebnistyp
case "GK"
BDKL = GK
case "iP"
BDKL = iP
case "iM"
BDKL = iM
end select
End Function

beim Verwenden der Funktion musst du dann angeben, welches Ergebnis du sehen willst:
=BDKL("GK";1;2;...)

beachte weiterhin, dass in VBA jeder Variable einzeln ihr Typ zugewiesen werden muss:
DIM x, y, z as long

deklariert nur z als Long und x, y als variant.
sollen alle drei long sein, musst du schreiben:
dim x as Long, y as Long, z as long
gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige