Forums Neueste Beiträge
 

Eigene Funktionen

01/04/2008 - 19:40 von Peter Singer | Report spam
Hallo liebe Helfer,



meine doch recht komplexen Funktionen würde ich gerne in VBA programmieren.
Um mein elementares Problem verdeutlichen zu können, wàhle ich die einfache
Funktion 'addWert2' die zwei Zellenwerte (gleichen Zeile) addieren soll:



Public Function addWerte2(Wert1 As Range, Wert2 As Range) _

as single


addWerte2 = Wert1.Value + Wert2.Value

End Function



Diese Funktion funktioniert bestens bei den Aufrufen (z.B. aus Zelle C1),
wenn geschrieben wird:

= addWerte2(A1; B1)

oder wenn die beiden Zellen mit 'Zelle1' und 'Zelle2' benannt sind:

= addWerte2(Zelle1; Zelle2)



Sind jedoch die Spalten mit 'Spalte1' und 'Spalte2' benannt sind, dann habe
ich mein Problem, dass die Funktion:

= addWerte2(Spalte1; Spalte2)

nicht mehr funktioniert, obwohl die Angabe:

Spalte1+ Spalte2

direkt in der Zelle geschrieben, das Ergebnis liefert.



Ich nehme an, dass als weiterer Parameter die Zeilennummer mitgegeben werden
muss, damit die VBA-Funktion aus den beiden Rangwerten jene zur zugehörigen
Zeile bestimmen kann. Hier aber komme ich aber nicht weiter, besonders fehlt
mir die Kenntnis, wie die Zeilennummer im Funktionsaufruf bestimmt werden
kann. Vielleicht gibt es auch eine andere einfachere Lösung.



Ich wàre sehr dankbar, wenn mir jemand weiter helfen könnte.



Mit besten Grüßen

Peter
 

Lesen sie die antworten

#1 Peter Schleif
01/04/2008 - 21:08 | Warnen spam
Peter Singer schrieb am 01.04.2008 19:40:

= addWerte2(Spalte1; Spalte2) nicht mehr funktioniert

obwohl die Angabe: Spalte1+ Spalte2
direkt in der Zelle geschrieben, das Ergebnis liefert.



Excel geht bei der Addition von zwei Spalten etwas "intelligenter" vor
als VBA. In der Tablle wird zeilenweise addiert, weil Excel vermutet,
dass der Benutzer genau das wollte. VBA ist ein bisschen penibler und
will tatsàchlich zwei Zellen/Zellwerte addieren. Du kannst deine
Function umschreiben, sodass sie auch Zellbereiche verarbeiten kann.
Etwa so:

addWerte2 = Wert1(1,1) + Wert2(1,1)

Aber damit werden immer die jeweils linken obersten Zellen der beiden
Bereiche addiert. Für addWerte2(Spalte1;Spalte2) bekommst Du also in
*jeder* Zeile die Addition der *ersten* Zeile.



Ich nehme an, dass als weiterer Parameter die Zeilennummer mitgegeben werden
muss



Nicht unbedingt (siehe oben). Wenn Du aber eh schon bereit bist, die
Übergabe-Werte zeilenabhàngig zu machen, kannst Du gleich die zur
Zeile passenden Bezüge übergeben und die Formel nach unten ausfüllen.
Das Anpassen der Bezüge übernimmt ja Excel für dich.


Peter

Ähnliche fragen