excel eine funktion mit und ohne vba?

2 Antworten

Man kann jede Excel-Funktion auch in VBA bauen.

Beispiel: Du schreibst in A1 und B1 irgendwelche Zahlen rein und in C1 willst du dann mit =SUMME(A1:B1) die Summe berechnen.

In VBA könntest du dafür z.B. schreiben

Public Function SummeA1B1() As Long
SummeA1B1 = Range("A1") + Range("B1")
End Function

und dann kannst du mit =SummeA1B1() die Summe aus A1 und B1 berechnen. Oder wenn du die Summe-Funktion nachbauen willst: 

Public Function eigeneSumme(Zellen As Range) As Long
Dim dieseZelle As Range
Dim Ergebnis As Long
For Each dieseZelle In Zellen
Ergebnis = Ergebnis + dieseZelle
Next dieseZelle
eigeneSumme = Ergebnis
End Function

Damit kannst du dann mit =eigeneSumme(A1:B1) dasselbe berechnen, wie mit =SUMME(A1:B1). Ist allerdings ohne Prüfung, ob in der Zelle auch eine Zahl steht. Dafür müsste die Funktion dann etwas umfangreicher gebaut werden, sonst kommt als Ergebnis #WERT.

Wenn ich es richtig verstehe, willst Du eher die beiden Variante beispielhaft demonstrieren. Reicht Dir da eine einzelne Formel aus oder müsste es mehr sein?

Sichtbar machen könnte man die Unterscheide z.B. mit einer Wenn-Beispiel

Fiktiver Fall: Ab Einkaufswert 100 EUR gibt es 10 EUR Rabatt.
In Spalte A stehen diverse Einzelpreise, die summiert werden. Summe steht dann z.B. in A10. B10 ist der zu zahlende Betrag

Das würdest Du als Formel in A10 schreiben =summe(A1:A9)
und für B10: =wenn(A10>=100;A10-10;A10)

In VBA (könnte man noch kürzer machen, aber hier zu Demozwecken mit einer Variablen)

sub rabatt()
Dim rabatt As integer
Range("A10").Value = WorksheetFunction.Sum(Range("A1:A9"))
If Range("A10").Value >= 100 Then rabatt = 10 Else rabatt = 0
Range("B10").Value = Range("A10").Value - rabatt
end sub