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

aktuelle Zellposition an Function übergeben

Forumthread: aktuelle Zellposition an Function übergeben

aktuelle Zellposition an Function übergeben
22.02.2006 14:40:34
Günter
Ich benötige eine Funktion, mit der ich den Wert der aktuellen Zellenpostion mit denen anderer Zellen vergleichen kann...
die Funktion (bspw. "Grösser" genannt) steht in A1
mit

Function Grösser (Wert1 as integer, Wert2 as integer)
if Wert1 > Wert2 then Grösser =1
End Function

kann ich ja überprüfen ob der zellinhalt von A1 grösser als A2 ist...dabei muss ich aber immer beide Zellen angeben (=Grösser (A1;A2)..geht das auch anders, d.h. eine Function, mit der ich Zellen ausgehend von der aktuellen Zelle, in der ja die Funktion dann steht, ansprechend/auslesen kann ?!
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aktuelle Zellposition an Function übergeben
22.02.2006 14:51:36
Mac4
Hallo Günter,
meinst Du so was?

Function Grösser()
Application.Volatile
If Cells(ActiveCell.Row + 1, 2) > Cells(ActiveCell.Row + 2, 2) Then Grösser = 1
End Function

Marc
AW: aktuelle Zellposition an Function übergeben
22.02.2006 15:17:50
Günter
Ja...aber wenn ich die Funktion folgendermassen ändere (Funktion steht in C1, es soll A1 mit B1 verglichen werden, wenn A1>B1 dann ist Kleiner =1) :

Function Kleiner()
Application.Volatile
If Cells(ActiveCell.Column - 2, 1) > Cells(ActiveCell.Column - 1, 1) Then Kleiner = 1
End Function

kommt stehts die Fehlermeldung #Wert..Warum ?!
Anzeige
AW: aktuelle Zellposition an Function übergeben
22.02.2006 15:41:00
Mac4
Hallo Günter,
das liegt daran, dass die Funktion über Activecell die Position der gerade geänderten Zelle erhält und nicht die Addresse der Formel behält.
Auf die Schnelle fällt mir da nur sowas ein - vielleicht kannst Du ja damit leben:
Der Eintrag Basis ist immer die Zelle, in der Formel steht.

Function Kleiner(Basis As Object)
Application.Volatile
If Cells(Basis.Column - 2, 1) > Cells(Basis.Column - 1, 1) Then Kleiner = 1
End Function

Marc
Anzeige
AW: aktuelle Zellposition an Function übergeben
22.02.2006 15:44:10
u_
Hallo,
ActiveCell ist die Zelle, die markiert ist und nicht die, in der die Formel steht.
Ich sehe nur die Möglichkeit, der funktion einfach die Zelle mitzugeben, in der sie steht.

Function kleiner(rng As Range)
Application.Volatile
kleiner = (rng.Offset(0, -1) < rng.Offset(0, -2)) * -1
End Function

Gruß
Geist ist geil!
Anzeige
AW: aktuelle Zellposition an Function übergeben
22.02.2006 15:54:03
Günter
Okay, funktioniert...merci
;
Anzeige

Infobox / Tutorial

Aktuelle Zellposition an Funktion übergeben in Excel


Schritt-für-Schritt-Anleitung

Um die aktuelle Zellposition in einer benutzerdefinierten Funktion zu verwenden, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Arbeitsmappe)", wähle "Einfügen" und dann "Modul".

  3. Gib die Funktion ein: Kopiere und füge den folgenden Code in das Modul ein:

    Function Grösser() 
       Application.Volatile
       If Cells(ActiveCell.Row, ActiveCell.Column) > Cells(ActiveCell.Row + 1, ActiveCell.Column) Then 
           Grösser = 1 
       Else 
           Grösser = 0 
       End If 
    End Function
  4. Verwende die Funktion in Excel: Gehe zurück zu deiner Excel-Tabelle und gib in eine Zelle =Grösser() ein. Diese Funktion vergleicht den Wert der aktuellen Zelle mit der Zelle direkt darunter.


Häufige Fehler und Lösungen

Fehler 1: #WERT! bei Verwendung der Funktion

  • Lösung: Achte darauf, dass du die richtige Zellreferenz verwendest. Wenn du ActiveCell verwendest, bezieht sich dies auf die aktuell ausgewählte Zelle und nicht unbedingt auf die Zelle, in der die Funktion steht.

Fehler 2: Die Funktion gibt immer 0 zurück

  • Lösung: Überprüfe, ob die Werte in den Zellen, die du vergleichst, tatsächlich Zahlen sind. Wenn nicht, wird die Funktion möglicherweise nicht korrekt arbeiten.

Alternative Methoden

Wenn du die Zellposition nicht über ActiveCell abrufen kannst oder möchtest, gibt es alternative Ansätze:

  1. Zelle als Parameter übergeben:

    Function Kleiner(rng As Range) 
       Application.Volatile
       Kleiner = (rng.Offset(0, -1) < rng.Offset(0, -2)) * -1 
    End Function

    Diese Methode erlaubt dir, die Zellreferenz direkt beim Aufruf der Funktion anzugeben.

  2. Basisadresse verwenden:

    Function Kleiner(Basis As Object) 
       Application.Volatile
       If Cells(Basis.Row, Basis.Column - 1) < Cells(Basis.Row, Basis.Column - 2) Then 
           Kleiner = 1 
       Else 
           Kleiner = 0 
       End If 
    End Function

    Hier wird die Basisadresse der Zelle verwendet, in der die Formel steht.


Praktische Beispiele

  • Beispiel 1: Verwende die Funktion Grösser, um zu überprüfen, ob der Wert in A1 größer ist als der Wert in A2:

    =Grösser()
  • Beispiel 2: Setze die Funktion Kleiner ein, um zu vergleichen, ob der Wert in B1 kleiner ist als der in C1:

    =Kleiner(B1)

Tipps für Profis

  • Verwende Application.Volatile: Dies stellt sicher, dass deine Funktion bei jeder Änderung in der Arbeitsmappe aktualisiert wird.
  • Zellenreferenzen dynamisch gestalten: Nutze die Offset-Methode, um flexibler auf verschiedene Zellen zuzugreifen, ohne die Funktion jedes Mal anpassen zu müssen.
  • Fehlerbehandlung einbauen: Implementiere einfache Fehlerbehandlungen, um sicherzustellen, dass deine Funktion auch bei unerwarteten Eingaben stabil bleibt.

FAQ: Häufige Fragen

1. Wie kann ich die Funktion in einer bestimmten Excel-Version verwenden? Die hier beschriebenen Funktionen sollten in Excel 2010 und späteren Versionen problemlos funktionieren.

2. Gibt es Einschränkungen bei der Verwendung von benutzerdefinierten Funktionen? Ja, benutzerdefinierte Funktionen können in bestimmten Szenarien langsamer sein und sind nicht in Array-Formeln verwendbar, wenn sie ActiveCell nutzen.

3. Wie kann ich die Funktion für mehrere Zellen gleichzeitig verwenden? Du kannst eine benutzerdefinierte Funktion nicht direkt auf einen Zellbereich anwenden. Verwende stattdessen eine Schleife in deiner VBA-Funktion, um durch die Zellen zu iterieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige