Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Mehrere Werte durch Function berechnen und zurückgeben

Forumthread: Mehrere Werte durch Function berechnen und zurückgeben

Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 11:17:28
StefanK
Guten Morgen zusammen,
aktuell werden die 3 Werte "Zeile", "VonZeile" und "BisZeile" innerhalb einer normalen Prozedur ermittelt:
...
Suchwert = .Cells(ActiveCell.Row, "B")
Zeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".")) & "0", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
VonZeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row '+ 1
Biszeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
...
Da ich diese aber öfter benötige, war die Idee, diese in eine Funktion auszulagern. Ich bin noch etwas unbedarft was Funktionen angeht, finde das aber sehr spannend. Kann ich einer Funktion 3 Werte übergeben und 3 Ergebnisse zurückerhalten, oder müssen dann 3 einzelne Funktionen erstellt werden ? Vielleicht könnt Ihr mir dabei etwas auf die Sprünge helfen... 😉

Besten Dank und viele Grüße
Stefan
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 12:21:32
Alwin Weisangler
Hallo Stefan,

lade mal eine kleine Demodatei mit ein paar funktionalen Datensätzen hoch. Soll es eine UDF werden. oder willst du die Funktion per VBA aufrufen?

Gruß Uwe
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 12:51:29
Ulf
Hi,
~ so bist du auf dem Weg
Option Explicit


Dim wks As Worksheet

Public Sub machwas()
Dim strSuchwert As String
Dim lngZ As Long, lngVonZ As Long, lngBisZ As Long
Set wks = ThisWorkbook.Worksheets(1)
strSuchwert = "tmp" 'wks.Cells(ActiveCell.Row, "B")
If findeZellen(strSuchwert, lngZ, lngVonZ, lngBisZ) Then

End If
End Sub

Public Function findeZellen(ByVal strSuchwert As String, ByRef lngZeile As Long, ByRef lngVonZeile As Long, ByRef lngBisZeile As Long) As Boolean
On Error GoTo findeZellenERR
With wks
lngZeile = .Columns("B").Find(What:=strSuchwert, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
lngVonZeile = .Columns("B").Find(What:=strSuchwert, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
lngBisZeile = .Columns("B").Find(What:=strSuchwert, lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
findeZellen = True
findeZellenOUT:
Exit Function
findeZellenERR:
findeZellen = False
Resume findeZellenOUT
End Function

Die Funktion liefert als Rückgabe ob es Fehler gab (Abbruch ggf) und nimmt hier Referenzen auf Werte und ggf auch den Suchstring auf.
Nach dem Muster kannst du verfahren
hth
Ulf
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 13:16:45
Marc
Also soweit ich weiß,
kann eine Funktion nur einen Wert am Ende zurückgeben und anzeigen.

Natürlich kann man mehrere Eingabewerte an die Funktion selber übergeben, aber es kann nur ein Wert am ende angezeigt werden.
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 13:23:34
Marc
Wenn du aber innerhalb der Funktion mehrere Dinge abarbeiten willst, und der Funktion sagst, wann sie welchen BEreich auslesen, beschreiben, testen soll kannst du das machen, dann würde aber die Funktion selber, nur als Transporter funktionieren, und am ehesten eine Wahr/Falsch Funktion sein


z.B.


Public Function TestZeile (Unterfunktion as Integer, Wert as Integer) as Boolean

TestZeile = false
If Unterfunktion = 1 Then
' Hier würde z.B. Spalte /Zeile XY bearbeiten mit der Variable 'Wert' als Eingabe
TestZeile = true
ElseIf Unterfunktion = 2 Then
' Hier würde z.B. Spalte2 /Zeile XY2 bearbeiten mit der Variable 'Wert' als Eingabe
Testzeile = true
End If
End Function


Wenn man hier aber mit relativen Tabellen und Spaltenbezügen arbeitet, kann das schnell verwirrend und unübersichtlich werden..

In der Zelle wo die Function dann ausgeführt wird, erscheint dann ein WAHR oder FALSCH
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 13:47:55
StefanK
Hi Marc,

als ich habe den Code von Ulf jetzt ein wenig angepasst und ich kann in der Funktion 3 Werte berechnen lassen und die Werte einzeln in der Sub wieder auslesen...
Allerdings bin ich auch absoluter Laie was Funktionen angeht und vielleicht mache ich auch was falsch...

Public Function findeZellen(ByVal Suchwert As String, ByRef Zeile As Long, ByRef VonZeile As Long, ByRef BisZeile As Long) As Boolean

On Error GoTo findeZellenERR
With ThisWorkbook.Sheets("Produktion")
Zeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".")) & "0", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
VonZeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
BisZeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
findeZellen = True
findeZellenOUT:
Exit Function
findeZellenERR:
findeZellen = False
Resume findeZellenOUT
End Function

Sub LetzteSpalte()
Dim Suchwert As String
Dim Zeile As Long, VonZeile As Long, BisZeile As Long
With ThisWorkbook.Sheets("Produktion")
Suchwert = .Cells(ActiveCell.Row, "B")

MsgBox findeZellen(Suchwert, Zeile, VonZeile, BisZeile)
MsgBox Zeile
MsgBox VonZeile
MsgBox BisZeile
End With
End Sub


Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 14:24:00
Marc
Die Frage ist, wozu brauchst du die Function?
Denn das was du in der Function machst, kannst du auch in der Sub implementieren..
Und die Function gibt dir ja nur den Rückgabe Wert True oder FALSE (weil Boolean)





MsgBox findeZellen(Suchwert, Zeile, VonZeile, BisZeile) '--> hier wird die Funktion ausgeführt mit den vorher definierten Grundwerden, der 3 Variablen , in diesem Fall 0 --> es wird true oder False zurück gegeben

'--> die Drei Variablen beziehen sich auf die Defintion der Variablen aus der SUB, nicht aus dem Ergebenis der der Function (sind unabhängige Variablen, auch wenn sie gleich heißen. daher müssten sie 0 anzeigen, da sie initiert sind, aber keinen Wert haben
MsgBox Zeile
MsgBox VonZeile
MsgBox BisZeile


Lösung wären:

a) du könntest eine globale/Public Variable einfügen (oder in dem Fall 3, für Zeile, Zeile von, ZeileBis , da durch das sie Public, global sind, können sie in jeder Function/Sub aufgerufen werden, verändert werden und werden über entsprechend das gleiche Ergebnis liefern..
--> Nachteil das du bei Start der SUB jeweils die Variablen zurück setzen musst, sonst zählt er endlos weiter, d.h. die Funktion zeigt immer nur in der aktuellen Nutzung richtige Zahlen an
b) du verwirfst die IDEE mit der Function, und baust, das was du in der Function hast , in die SUB ein
--> Nachteil eine Sub ist nicht in Excel wie eine Funktion nutzbar spricht du kannst sie nicht in einer Zelle aufrufen
c) du behälst die Idee mit der Funktion bei, Die Ausgabe der Suchergebnisse (Menge der gefundenen Zeichen) findet dann aber in einer Zelle statt.. Diese müssten dann in der Funktion definiert werden, wo er sie rein schreiben kann.. und der Bool Wert der Funktion gibt dir nur die Bestätigung, das du richtig gearbeitet hast, oder es zu Fehlern kam.. (Wo der Fehler ist, wird dir aber nicht übergeben)
d) du erstellst eine Function als Variant und gibst ein Array mit deinen gesuchten Werten zurück..
z.B.


Function ZahlenArray() As Variant
ZahlenArray = Array(1, 2, 3, 4, 5)
End Function
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
03.12.2025 17:45:47
Ulf
Hi,
damit das gefährliche Halbwissen keine Blüten treibt:
https://de.wikibooks.org/wiki/VBA_in_Excel/_ByRef_und_ByVal

Zitat
Variablen können an Funktionen oder Unterprogramme übergeben, dort zu Berechnungen verwendet und mit geänderten Werten zurückgegeben werden. Entscheidend hierfür ist das Schlüsselwort der Parameter-Definition des aufnehmenden Unterprogramms.

VBA kennt die Parameterübergaben ByRef (Übergabe der Referenz auf die Speicherstelle mit dem Wert der Variablen) und ByVal (Übergabe des Wertes der Variablen). Im ersten Fall – das ist die Standardeinstellung, d.h. wenn keine Vorgabe erfolgt, wird der Parameter als ByRef behandelt – wird der Wert des Parameters weiterverarbeitet; Änderungen sind auch für das aufrufende Programm wirksam. Im zweiten Fall wird eine Kopie des Parameters übergeben; die Wirksamkeit beschränkt sich auf das aufgerufene Unterprogramm und der Parameter im aufrufenden Programm behält seinen ursprünglichen Wert.
Zitat
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 13:12:22
StefanK
Hi Ulf, super vielen herzlichen Dank. Nach Deiner Hilfe wurde mir die Funktion etwas klarer und ich konnte sie ein wenig anpassen, so dass ich nun die gewünschten Werte aus der Funktion erhalten 👍🏻 Perfekt !

Besten Dank für die Hilfe (auch an Ulf).
VG Stefan
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 12:35:43
StefanK
Hi Uwe, ok, ich habe die Datei einmal "neutralisiert", schau mal... (allerdings komplett ohne Makros, sonst kann ich die nicht hochladen).

https://www.herber.de/bbs/user/179754.xlsx

Ich möchte halt immer die Zeilenanzahl der Unterpunkte ermitteln (z.B. von 3.1 - 3.3).
Das klingt jetzt banal, aber die Punkte erweitern sich ja noch...

Danke Dir vorab, VG Stefan

Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 12:48:54
Alwin Weisangler
ohne funktionale Zusammenhänge wird dir da wohl kaum einer helfen können.
Vielleicht nur so viel.

Weg via parametrisierte Prozedur:


Sub RueckgabeFunde(Zeile As Range, VonZeile As Range, Biszeile As Range)
' hier dein auzuführender Code
End Sub

Sub Aufruf()
With Tabelle9
Call RueckgabeFunde(.Cells(ActiveCell.Row, "B"), .Columns("B"), .Columns("B"))
End With
End Sub

für Funktion braucht es klar erkennbare Zusammenhänge!

Gruß Uwe
Anzeige
AW: Mehrere Werte durch Function berechnen und zurückgeben
01.12.2025 13:01:36
daniel
Hi
eine Funktion kann im Prinzip immer nur einen Wert zurückgeben.
Man könnte sich damit behelfen, dass dieser Wert ein Array ist der dann die drei Werte enthält.

ein anderere Weg für mehrere Rückgabewerte ist, dass man keine Function schreibt, sondern eine Sub und die Variablen, die die Werte bekommen sollen, als zusätzliche Parameter übergibt. Die Sub kann dann diese übergebenen Variablen nicht nur auslesen, sondern auch mit Werten füllen, die diese Variablen dann auch in der übergeordeten Sub haben.

schau dir mal diesen Beispielcode an:

Option Explicit


Sub Main()
Dim Suchwert As String
Dim Zeile As Long
Dim VonZeile As Long
Dim BisZeile As Long


Suchwert = "3.2"

Call ZeilenZuweisen(Suchwert, Zeile, VonZeile, BisZeile)

MsgBox Zeile & vbLf & VonZeile & vbLf & BisZeile, , Suchwert
End Sub


Sub ZeilenZuweisen(Suchwert As String, Zeile As Long, VonZeile As Long, BisZeile As Long)

With Sheets("Produktion")
Zeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".")) & "0", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
VonZeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row '+ 1
BisZeile = .Columns("B").Find(What:=Left(Suchwert, InStr(Suchwert, ".") - 1) & ".", lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With

End Sub


beachte, dass die Variablen in den beiden Subs nicht zwingend gleich benannt sein müssen, die Namen können auch unterschiedlich sein.
Die Zuordnung erfolgt dann über die Reichenfolge.

Gruß Daniel
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18