excel eine funktion mit und ohne vba?
hallo, gibts eine möglichkeit mit excel eine kleine funktion zu erstellen, die sowohl mit vba und ohne vba machbar ist? also eine funtkion nur mit excel zb eine rechenaufgabe und dann dasselbe über vba programmiereung? wäre cool wenns so eine vorlage gäbe... oder mir einer helfen kann, ich blicke da überhaupt net durch...
danke im voraus
mfg matheasi
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