Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Eigene VBA Function Schreiben

Eigene VBA Function Schreiben
20.05.2018 09:07:47
Thomas
Guten Morgen zusammen,
ich möchte eine Funktion in VBA erstellen und habe hier schon einiges gelesen und schon das Grundgerüst der Funktion erstellt.
~

Public Function MEA()
Dim Zelle As Range
This Workbook.Worksheets("Tabelle1")
MEA = Wenn(Rechnung!$L$9="Frio";F2*MEA*_1._Mietdauer;F2*MEA*_2._Mietdauer)
End Function
~
Ich will in verschiedene Zellen ZB Formel in F3 =MEA(F2) eintragen können.
Wenn ich nun in G5 =MEA(G4) dann lautet die Formel Wenn(Rechnung!$L$9="Frio";G4*MEA*_1._Mietdauer;G4*MEA*_2._Mietdauer)
Ist es überhaupt möglich diese Funktion zu erstellen da ich weg von den Formeln kommen möchte aber dennoch ggf es ändern kann? Wie müsste der Code aussehen für diese Funktion, dann kann ich weitere Funktionen ergänzen.
Vielen Dank schon mal
Gruß Thomas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigene VBA Function Schreiben
20.05.2018 09:20:42
RPP63
Moin!
Trage die Formel per VBA in die Zelle ein, kopiere sie und ersetze per .PasteSpecial durch xlPasteValues.
(dies kannst Du zunächst mal mit dem Rekorder aufzeichnen)
Von einer UDF halte ich hier rein gar nichts!
Sie macht nur dann Sinn, wenn ihr Parameter übergeben werden sollen, die erst im programmatischen Ablauf ermittelt werden können.
Gruß Ralf
AW: Eigene VBA Function Schreiben
20.05.2018 09:46:11
Thomas
Guten Morgen Ralf,
Das habe ich schon als Formel in F3 stehen: =WENN($B$2="MEA";WENN(Rechnung!$L$9="Frio";F2*MEA*_1._Mietdauer;F2*MEA*_2._Mietdauer);WENN($B$2="Einheit10";WENN(Rechnung!$L$9="Frio";F2/Einh.10*_1._Mietdauer;F2/Einh.10*_2._Mietdauer);WENN($B$2="Einheit11";WENN(Rechnung!$L$9="Frio";F2/Einh.11*_1._Mietdauer;F2/Einh.11*_2._Mietdauer))))
Wenn ich also jetzt in B2 was ändere wirkt sich das auf die ganze Zeile aus was aber nicht sein soll daher würde ich B2 bzw Spalte B ignorieren oder löschen können und es nur über die Funktion rechnen lassen.
Gruß Thomas
Anzeige
AW: Eigene VBA Function Schreiben
20.05.2018 09:29:30
Barbaraa
Hi Thomas,
hier ein Beispiel zum Errechnen Anzahl Sekunden mit gegebenen Stunden und Minuten:
Fügst du in ein Modul (nicht in das "Tabelle1"-Modul, sondern in "Modul1", das Du erst erstellst) das ein:
Function Sekunden(Stunden As Double, Minuten As Double) As Double
Sekunden = (Stunden * 60 + Minuten) * 60
End Function
Weitere Infos mit dem Suchbegriff "Benutzerdefinierte Funktionen" erhältlich.
LGB
AW: Eigene VBA Function Schreiben
20.05.2018 10:45:05
Thomas
Hallo Barbaraa,
danke aber das ist glaube nicht das was ich suche!
Gruß Thomas
AW: Eigene VBA Function Schreiben
20.05.2018 16:45:30
Barbaraa
Tja, Thomas, das war eine Benutzerdefinierte Funktion (oder engl. UDF).
Dein eingangs gezeigtes Beispiel wirft Fragen auf:
Da steht: "MEA =" und dann kommt was, wo auch MEA vorkommt.
Das ist so wie x=5+x, da kann man auch nicht x bestimmen.
Was ist bei Dir MEA, und was ist "_1._Mietdauer"? Sind das vergebene Namen? Falls ja, dann sieht die Funkion so aus:
Function MEA_R(Wert1)
If Sheets("Rechnung").Range("L9") = "Frio" Then
MEA_R = Wert1 * [MEA] * [_1._Mietdauer]
Else
MEA_R = Wert1 * [MEA] * [_2._Mietdauer]
End If
End Function
Beachte, dass der Funktionsname anders als MEA heisst.
In die gewünschte Zelle kannst Du dann schreiben "=MEA(F2)" oder eine andere Zelle als F2. jedenfalls rechnet die Formel neu, wenn sich bei dieser Zelle was tut, nicht aber, wenn sich der im Makro verwendete Wert ändert, zB Frio. Auch nicht mit Neuberechnen (F9-Taste). Nur wenn du in die Zelle hineingehst mit F2-Taste und wieder verläßt.
Etwas unpraktisch.
Daher ist es besser, alle Werte, deren Änderung eine Neuberechnung auslösen soll, als Funktionsargument einzubringen. Also so:
Function MEA_S(Wert1, Wert2, Wert3, MD1, MD2)
If Wert3 = "Frio" Then
MEA_S = Wert1 * Wert2 * MD1
Else
MEA_S = Wert1 * Wert2 * MD2
End If
End Function
Hilft das?
LGB
Anzeige
AW: Eigene VBA Function Schreiben
20.05.2018 16:52:49
Barbaraa
Fehler vertippt. Richtig wäre
In die gewünschte Zelle kannst Du dann schreiben "=MEA_R(F2)"
LGB
AW: Eigene VBA Function Schreiben
20.05.2018 19:16:47
Thomas
Hallo Barbaraa,
danke für deine Hilfe, ich habe es mit deinem oberen Code hinbekommen und kann nun selber weitere Funktionen einfügen.
Dein Funktion ist nun für die ganze Mappe und nicht beschränkt auf nur das eine Tabellenblatt da wäre ich dir noch dankbar wie ich das nur auf ein Blatt beschränk kann?
Gruß Thomas
AW: Eigene VBA Function Schreiben
21.05.2018 11:56:56
onur
Jede Excel-Funktion ist in jedem Blatt gültig, sonst macht es ja auch keinen Sinn.
Warum beschränken? Wenn du sie in anderen Blättern nicht brauchst, benutze sie da einfach nicht.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige