Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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

#WERT! als Rückgabewert einer Funktion

#WERT! als Rückgabewert einer Funktion
05.05.2020 22:00:07
Annika
Hallo zusammen,
ich habe eine Funktion geschrieben, die über das Arbeitsblatt aufgerufen werden soll. Ziel soll es sein, dass Werte, die in dem Tabellenblatt stehen in die Funktion übergeben werden. Leider erhalte ich "#WERT!" als Rückgabewert und nicht das von mir gewünschte Ergebnis. Rufe ich die Funktion hingegen über ein Test-Sub auf, erhalte ich beim Debuggen das Ergebnis.
Vielleicht kann mir ja jemand weiterhelfen.
Vielen Dank :-)
Sub Test()
Dim c As Variant
Dim d As Variant
c = Sheets("Unit Root").Range("A2:A21").Value
d = Sheets("Unit Root").Range("L30:AE30").Value
t = DF(d)
End Sub
Public Function DF(Data As Variant)
Dim x As Variant
Dim y As Variant
Zeilen = UBound(Data, 1)
Spalten = UBound(Data, 2)
If Zeilen > 1 And Spalten > 1 Then
MsgBox ("Eingabebereich enthält mehr als eine Zeitreihe. Bitte auf eine Zeitreihe begrenzen. _
")
Exit Function
ElseIf Zeilen = 1 And Spalten > 1 Then
n = Spalten - 2
ReDim x(1 To 2, 1 To n)
ReDim y(1 To 1, 1 To n)
For i = 1 To n
y(1, i) = Data(1, i + 2) - Data(1, i + 1)
x(1, i) = Data(1, i + 1)
x(2, i) = Data(1, i + 1) - Data(1, i)
Next i
ElseIf Zeilen > 1 And Spalten = 1 Then
n = Zeilen - 2
ReDim x(1 To 2, 1 To n)
ReDim y(1 To 1, 1 To n)
For i = 1 To n
y(1, i) = Data(i + 2, 1) - Data(i + 1, 1)
x(1, i) = Data(i + 1, 1)
x(2, i) = Data(i + 1, 1) - Data(i, 1)
Next i
End If
Reg = WorksheetFunction.LinEst(y, x, True, True)
std = (Reg(1, 2) / Reg(2, 2))
DF = std
End Function

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: #WERT! als Rückgabewert einer Funktion
05.05.2020 22:23:31
onur
Ich würde in jeder Zeile einen Haltepunkt setzen und Schritt für Schritt die Funktion abarbeiten.
Wo VBA aussteigt ist die Zeile, die ihm nicht gefällt.
AW: #WERT! als Rückgabewert einer Funktion
05.05.2020 22:39:33
Daniel
Hi
wenn du den UBound abfragst, brauchst du ein einfaches Array (ein- oder mehrdimensional)
in deinem Makro machst du die Umwandlung von Range zu Array schon außerhalb der Funktion:
d = Sheets("Unit Root").Range("L30:AE30").Value
verwendest du die Funktion jedoch in einer Zellformel, übergibst du kein einfaches Array, sondern den Zellbereich als Range-Objekt.
und für dieses Range-Objekt gibt es kein Ubound, daher dann der Fehlerabbruch, leider kommentarlos.
du müsstest also, wenn du so weiter machen willst, das Range-Objekt erst in ein Array überführen.
willst du mit beiden Varianten arbeiten, müsstest du diese Prüfung voranstellen:
Public Function DF(DataX As Variant)
Dim Data
Dim Zeilen, Spalten
If TypeName(DataX) = "Range" Then
Data = DataX.Value
Else
Data = DataX
End If
und dann normal weiter arbeiten, dh erstmal schauen, was wurde übergeben und dann ggf umwandln.
Gruß Daniel
Anzeige
AW: #WERT! als Rückgabewert einer Funktion
06.05.2020 20:11:50
Annika
Vielen lieben Dank für die Hilfe.
Das klappt jetzt wunderbar mit deinem Tipp Daniel. Danke :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige