Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Funktion in VBA
#1
Moin Moin,

ich möchte mich mal an Funktionen in VBA wagen. Eigentlich wollte ich es ziemlich einfach halten, indem ich nur eine extrem lange If, Then, ElseIf, Else, EndIf Reihe mit verschiedenen Prüfkriterien definieren.

Nun da ich mich mit Funktionen in VBA gar nicht auskenne, mal eine kurze Frage.

Üblicherweise schreibe ich in eine Zelle =A15*B15. Wenn ich diese Zelle nun nach unten ziehe, mit dieser Funktion, dann ergibt sich für die nächste Zelle =A16*B16 usw.

Wie läuft das ganze nun in VBA ab?
Wenn ich die Funktion auf A15 und B15 auslege in VBA, wird sich das automatisch mitbewegen, wenn ich die Zelle nach unten Ziehe mit der Funktion?
Oder muss ich in VBA sowas wie "betrachte den Wert der Ausgangsspalte und den Wert 1 Spalte rechts von der Ausgangsspalte" programmieren?

Beste Grüße
Green
to top
#2
Hallo!
Zunächst mal:
Was sind für Dich Funktionen?
Formeln?
Dann gibt es vier Varianten, sie in die Tabelle einzutragen:
.Formula, .FormulaR1C1 und deren Local-Derivate.
Ferner gibt es wie in Excel auch die Möglichkeit Spalte und/oder Zeile absolut zu stellen.
Oder geht es Dir darum, Ergebnisse aus Formeln als Wert in die Tabelle zu schreiben?

Mehr Infos!

Gruß Ralf
to top
#3
(09.03.2016, 13:49)Green schrieb: Üblicherweise schreibe ich in eine Zelle =A15*B15. Wenn ich diese Zelle nun nach unten ziehe, mit dieser Funktion, dann ergibt sich für die nächste Zelle =A16*B16 usw.

Wie läuft das ganze nun in VBA ab?
Wenn ich die Funktion auf A15 und B15 auslege in VBA, wird sich das automatisch mitbewegen, wenn ich die Zelle nach unten Ziehe mit der Funktion?
Oder muss ich in VBA sowas wie "betrachte den Wert der Ausgangsspalte und den Wert 1 Spalte rechts von der Ausgangsspalte" programmieren?

In VBA schreibst Du die Formel (besser wäre: das Ergebnis) direkt in die Zelle, mit VBA wird nix gezogen, für die weiteren Zellen muß das auch programmiert werden

Du könntest schreiben:

For i = 15 to 25          ' Bereich anpassen
  Range("C" & i) = Range("A" & i) + Range("B" & i)      ' Spalten anpassen
Next i

oder Du kopierst die Zelle nach unten:
Range("C15").FormulaLocal = "=A15 + B15"
Range("C15").Copy Range("C16:C25")

Hier die getesteten Makros für die beiden Lösungen mit Formel:
Option Explicit

Sub einfügen_Schleife()
  Dim i As Integer
 
  For i = 15 To 25          ' Bereich anpassen
     Range("C" & i) = Range("A" & i) + Range("B" & i)      ' Spalten anpassen
  Next i
End Sub

Sub einfügen_kopieren()
  Range("C15").FormulaLocal = "=A15 + B15"
  Range("C15").Copy Range("C16:C25")
End Sub

Hier 2 Lösungen für das direkte eintragen des Ergebnisses:
Sub Ergebnis_eintragen()
  Dim i As Integer
 
  For i = 15 To 25          ' Bereich anpassen
'      Range("C" & i) = WorksheetFunction.Sum(Range("A" & i), Range("B" & i))      ' Spalten anpassen
     Range("C" & i) = WorksheetFunction.Sum(Range("A" & i & ":B" & i))      ' Spalten anpassen
  Next i
End Sub
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
[-] Folgende(r) 1 Benutzer sagt Danke an Rabe für diesen Beitrag:
  • Green
to top
#4
(09.03.2016, 14:20)RPP63 schrieb: Hallo!
Zunächst mal:
Was sind für Dich Funktionen?
Formeln?
Dann gibt es vier Varianten, sie in die Tabelle einzutragen:
.Formula, .FormulaR1C1 und deren Local-Derivate.
Ferner gibt es wie in Excel auch die Möglichkeit Spalte und/oder Zeile absolut zu stellen.
Oder geht es Dir darum, Ergebnisse aus Formeln als Wert in die Tabelle zu schreiben?

Mehr Infos!

Gruß Ralf

Hi!

Das ist eine sehr gute Frage. Als Funktion meine ich momentan eine vorprogrammierte "WENN;DANN;SONST" Funktion mit IF;THEN;ELSEIF. Da WENN auf 8 Verschachtelungen begrenzt ist und die Sache in Excel ziemlich unübersichtlich ist, habe ich mir gedacht, das ganze per IF Funktion in VBA zu programmieren. Am Ende möchte ich in der Zelle nur noch sowas wie

=EIGENEFUNKTION1

eingeben. Die Funktion selbst gestaltet sich hingegen so, dass mehrere Bedingungen in 27 verschachtelten IF's bzw. IF's und ELSEIF's geprüft werden. Bei der Prüfung der Bedingungen wird das ganze Zellenabhängig. Zur Zelle A1 gehören bspw. die Zellen C1, D1 und G1. C1, D1 und G1 müssen dann in der IF auf den zutreffenden Fall überprüft werden. Nun möchte ich das ganze aber auch in der Zelle A2 haben. Dazu gehören dann allerdings C2, D2 und G2. Reicht es hier aus =EIGENEFUNKTION1 auszuführen? Wird die Anpassung automatisch geregelt? Muss ich auf etwas achten, wenn ich das so geregelt haben möchte? (Wie erwähnt, habe ich keine Kenntnisse in der Programmierung von Formeln/Funktionen. Gesehen habe ich nur, dass mit einem "Function" im Kopf das ganze zugewiesen werden kann.)

Nochmal ein einfacheres Beispiel. Ich prüfe Autos auf ihren Zustand. In meiner EXCEL Tabelle kann ich die Marke (BMW, Audi, Mercedes, VW) und die Einheit des Verbrauchs (Liter, ccm, Gallone) auswählen. Dazu gebe ich noch pro Auto die gefahrenen Kilometer sowie den Verbrauch an.

Jetzt soll meine Funktion folgendes tun.
1. Schaut diese, welche Marke ich gewählt habe.
2. Prüft diese die dazugehörige Einheit.
3. Prüft meine Funktion die zu 1 und 2 gehörigen Fälle: Fall 1 -> Kilometer < 50.000 ; Fall 2 -> Kilometer >= 50.000
4. Liegt das ganze im Fall 2, so muss der momentane Verbrauch in einem Bereich von bspw. 3% liegen.

Auf Grundlage von 1, 2, 3 und 4 ergibt sich nun eine Einschätzung zum Zustand des Autos (bspw. "i. O.", "teilweise i. O." oder "n. i. O."), je nachdem welche Kriterien zutreffen.
Das Ganze soll sich natürlich in allen dazu vorgesehenen Zellen abspielen.

Grüße
Green
to top
#5
(09.03.2016, 14:40)Rabe schrieb: In VBA schreibst Du die Formel (besser wäre: das Ergebnis) direkt in die Zelle, mit VBA wird nix gezogen, für die weiteren Zellen muß das auch programmiert werden

Hi!
Vielen Dank, dann werde ich mal gucken ob ich das hinkriege, ansonsten muss ich wohl jeder Zelle eine neue Programmierung geben. Bei 76 Zellen wird's nicht so spaßig ^^...
Gruß
Green
to top
#6
Hi,

(09.03.2016, 14:45)Green schrieb: Da WENN auf 8 Verschachtelungen begrenzt ist und die Sache in Excel ziemlich unübersichtlich ist, habe ich mir gedacht, das ganze per IF Funktion in VBA zu programmieren.

diese Begrenzung auf 8 WENN ist doch mit Excel 2013 2010 aufgehoben.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
[-] Folgende(r) 1 Benutzer sagt Danke an Rabe für diesen Beitrag:
  • Green
to top
#7
Hi,

 
Zitat:dass mehrere Bedingungen in 27 verschachtelten IF's bzw. IF's und ELSEIF's geprüft werden
Warum blos so viele IF's. Smile 
Das klingt für mich nach Verweisen, kannst du ein Beispiel hochladen?
lg
Chris
lg Chris
Feedback nicht vergessen.
3a2920576572206973742064656e20646120736f206e65756769657269672e
 ?mage

to top
#8
Hi,

(09.03.2016, 14:45)Green schrieb: Nochmal ein einfacheres Beispiel. Ich prüfe Autos auf ihren Zustand. In meiner EXCEL Tabelle kann ich die Marke (BMW, Audi, Mercedes, VW) und die Einheit des Verbrauchs (Liter, ccm, Gallone) auswählen. Dazu gebe ich noch pro Auto die gefahrenen Kilometer sowie den Verbrauch an.

Du weißt doch schon, was wir Helfer erwarten:

Also stelle bitte (D)eine (Beispiel-)Tabelle als Excel-Datei zur Verfügung oder stelle die relevanten Ausschnitte hier dar, siehe die als Wichtige Themen: markierten Forums-Beiträge.
Deine Mustertabelle sollte mindestens etwa 10-15 Datensätze haben, sensible Daten anonymisiert. Vom Aufbau her muss sie aber deinem Original gleichen.
Auch ein Wunschergebnis sollte dargestellt und als solches erkennbar sein.
Die farbigen Texte sind anklickbare Links:

Hier steht, wie es geht:
Beitrag 1 WICHTIG: Tabellenausschnitte und VBA-Codes im Forum einstellen
Beitrag 2 WICHTIG: Arbeitsmappen zur Verfügung stellen

Eine Bitte:
Anstatt Screenshots ist eine Datei oder ein Ausschnitt besser!
"Du gehst ja auch nicht in die Werkstatt und gibst ein Foto Deines kaputten Autos ab!"

Für mich klingt das nicht sehr kompliziert. Und nimm gleich Dein richtiges Beispiel, nichts Abgespecktes.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#9
Hallo,

die Begrenzung ist schon mit 2010 aufgehoben. Aber wer soviel Verschachtelungen braucht, hat sein Problem nicht mal ansatzweise durchdacht und sich nicht mit Excel befasst!!!!!!
Gruß
Opa Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
to top
#10
(09.03.2016, 14:55)Rabe schrieb: Für mich klingt das nicht sehr kompliziert. Und nimm gleich Dein richtiges Beispiel, nichts Abgespecktes.
Hallo,

eigentlich wollte ich hier nur auf eine allgemeine Frage ansetzen, weshalb ich auch einen neuen Thread eröffnet habe. Meine Fachsprache ist aber so schlecht, dass dies nicht aufgegangen ist. Das eigentliche Problem befindet sich in meinem anderen Thread mit Beispieldatei, falls es jemanden interessieren sollte. Allerdings sind auch dort nicht ALLE Kriterien und Bedingungen enthalten, weil es ziemlich viele sind.

Zitat:Hi,

 
Zitat: schrieb:dass mehrere Bedingungen in 27 verschachtelten IF's bzw. IF's und ELSEIF's geprüft werden
Warum blos so viele IF's. ?mage 
Das klingt für mich nach Verweisen, kannst du ein Beispiel hochladen?
lg
Chris

Da du so freundlich fragst, hänge ich dir mal gerne eins an^^... Für weitere Infos zum Beispiel kannst du in meinem zweiten Thread mal schauen (Es geht um das "3. Blatt_report").
Im Beispiel sind nur die Kriterien zur ISO hinterlegt. Alle weiteren bräuchten ebenfalls solche "Tabellen" als Ausmaße bzw. sogar größere. Allerdings ist diese Lösung mit den Tabellen nicht schön und soll auch gar nicht sichtbar sein wenn möglich. Ich habe nochmals die wichtigen Elemente zur Auswahl farblich hervorgehoben.
Der Link zum Thread: http://www.clever-excel-forum.de/Thread-...schachteln

Zitat:Hallo,

die Begrenzung ist schon mit 2010 aufgehoben. Aber wer soviel Verschachtelungen braucht, hat sein Problem nicht mal ansatzweise durchdacht und sich nicht mit Excel befasst!!!!!!

Dann belehre mich bitte eines besseren Smile... Ihr seid meine einzige Hilfe neben Google. Allerdings ist Google nicht immer dein Freund, so zumindest habe ich es erfahren.
Ich wäre jeder Hilfe extrem dankbar.

Gruß Green


Angehängte Dateien
.xlsx   Finale Version.xlsx (Größe: 144,2 KB / Downloads: 3)
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste