Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formeln mit Case "..." in Zellen eintragen

Formeln mit Case "..." in Zellen eintragen
22.09.2016 16:37:44
Fingayn
Hallo Leute,
Ich hab eine Frage und zwar versuche ich über eine Case "..." Funktion bestimmte Rechnungen abhängig von anderen Zelleninhalten in eine Spalte einzutragen. Mein Cod sieht im Moment folgendermaßen aus:
Dim v As Integer, GP As Variant
For v = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Select Case Cells(v, 10)
Case "Position"
Select Case Cells(v, 7)
Case ""
GP = "0"
Case "?ei ?edarf"
GP = "=Cells(v, 12) * Cells(v, 14)"
Case "laufend"
GP = "=Cells(v, 12) * Cells(v, 14)"
Case "?ierteljährlich"
GP = "=Cells(v, 12) * Cells(v, 14) / 0.25"
Case "?albjährlich"
GP = "=Cells(v, 12) * Cells(v, 14) / 0.5"
Case "1/4 ?ährlich"
GP = "=Cells(v, 12) * Cells(v, 14) / 0.25"
Case "1/2 ?ährlich"
GP = "=Cells(v, 12) * Cells(v, 14) / 0.5"
Case "?ährlich"
GP = "=Cells(v, 12) * Cells(v, 14) / 1"
Case "*2*"
GP = "=Cells(v, 12) * Cells(v, 14) / 2"
Case "*3*"
GP = "=Cells(v, 12) * Cells(v, 14) / 3"
Case "*4*"
GP = "=Cells(v, 12) * Cells(v, 14) / 4"
Case "*5*"
GP = "=Cells(v, 12) * Cells(v, 14) / 5"
Case "*6*"
GP = "=Cells(v, 12) * Cells(v, 14) / 6"
Case "*10*"
GP = "=Cells(v, 12) * Cells(v, 14) / 10"
Case "*12,5*"
GP = "=Cells(v, 12) * Cells(v, 14) / 12.5"
Case "*25*"
GP = "=Cells(v, 12) * Cells(v, 14) / 25"
End Select
Case "Bedarfsposition"
GP = "0"
End Select
With Cells(v, 15)
.Formula = GP
End With
Next v

Kann mir jemand sagen, wie ich diesen Code so schreibe, dass er die gewünschten Rechnungen so in die Tabelle einfügt, dass man im Nachhinein etwas in der Spalte 14 einfügt und sich der Wert in Spalte 15 dann ändert? Also wie eine ganz normale z.B. "=SUMME()" Funktion es normalerweise tut?!
Wahrscheinlich stehe ich einfach nur total auf dem Schlauch aber nach zwei Stunden Zähneausbeißen und Recherche bin ich immernoch nicht weiter... :-/
Ich danke schonmal für eure Hilfe. Würde mich riesig freuen und mir mega helfen:-)
LG Lars
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
22.09.2016 17:13:23
MatthiasG
Hallo Fingayn,
schreib doch eine UDF (Benutzerdefinierte Funktion):
auf die Schnelle:

Function MeineFunktion(pos As String, zahlung As String, v12, v14)
Dim GP
Select Case pos
Case "Position"
Select Case zahlung
Case ""
GP = "0"
Case "bei Bedarf"
GP = v12 * v14
Case "laufend"
GP = v12 * v14
Case "vierteljährlich"
GP = v12 * v14 / 0.25
Case "halbjährlich"
GP = v12 * v14 / 0.5
Case "1/4 jährlich"
GP = v12 * v14 / 0.25
Case "1/2 jährlich"
GP = v12 * v14 / 0.5
Case "jährlich"
GP = v12 * v14 / 1
Case "*2*"
GP = v12 * v14 / 2
Case "*3*"
GP = v12 * v14 / 3
Case "*4*"
GP = v12 * v14 / 4
Case "*5*"
GP = v12 * v14 / 5
Case "*6*"
GP = v12 * v14 / 6
Case "*10*"
GP = v12 * v14 / 10
Case "*12,5*"
GP = v12 * v14 / 12.5
Case "*25*"
GP = v12 * v14 / 25
End Select
Case "Bedarfsposition"
GP = 0
End Select
MeineFunktion = GP
End Function

Und dann z.B. in Zelle O3:
=MeineFunktion(J3;G3;L3;N3)
Dann ändern sich die Werte in Spalte O (also Spalte 15), sobald die verknüpften Zellen geändert wurden.
Gruß Matthias
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 13:18:16
Fingayn
Hallo Matthias,
Danke für die Hilfe! Hab noch nie mit Funktionen gearbeitet... :-D
Die Funktion klappt soweit auch gut, nur bekomme ich sie über das Macro noch nicht in die Spalte geschrieben. Wenn ich versuche das über
Range("O3") = "=MeineFunktion(J3;G3;L3;N3)"
einzufügen, kommt immer ein Fehler (Laufzeitfehler 1004, Anwendungs- und objektdefinierter Fehler)
Wie bekomme ich das jetzt so eingefügt, dass er das für die ganze Spalte macht und dann auch immer die Zeile mit anpasst? (Also in dem Beispiel dann aus "=MeineFunktion(J3;G3;L3;N3)" "=MeineFunktion(J4;G4;L4;N4)" macht) Oder muss das nicht und ist über die Funktion selber schon abgedeckt?
Ich danke schonmal für die Hilfe!
LG Lars
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 13:47:51
Daniel
Hi
in Excel kannst du eine Formel in 4 verschieden Schreibweisen in die Zelle übergeben.
diese 4 Schreibweisen ergeben sich aus der Kombination für die Variationen von:
- Zelladdressierung in A1- oder Z1S1-Schreibweise
- Formelschreibweise in deutsch oder englisch
du musst dann auch angeben, welche Variante du verwendest:
Range(...).Formula (englisch mit A1-Adressen)
Range(...).FormulaR1C1 (englisch mit Z1S1/R1C1-Adressen)
Range(...).FormulaLocal (deutsch mit A1-Adressen)
Range(...).FormulaR1C1Local (deutsch mit Z1S1-Adressen)
wenn du die Formel in die .Value-Eigenschaft schreibst, muss sie der .Formula-Schreibweise entsprechen.
der unterschied zwischen deutsch und englisch liegt in folgendem:
1. Funktionsnamen (die sind bei UDFs in beiden Varianten gleich)
2. Parametertrennzeichen: Deutsch: Semikolon, Englisch: Komma
3. Dezimalzeichen bei kommazahlen: Deutsch: Komma, Englisch: Punkt
4. bei R1C1-Addressierungsart: Deutsch: Z1S1 und () für relative Zellbezüge, Englisch: R1C1 und () für relative Zellbezüge.
die Relativen Zellbezüge in den Formeln werden auch in der von dir verwendeten A1-Addressierungsart korrekt übernommen, wenn du die Formel in alle Zellen gleichzeitig schreibst:
Range("O3:O100").FormulaLocal = "=MeineFunktion(J3;G3;L3;N3)"

oder wenn du sie per Copy-Paste von der ersten Zelle in die weitern Zellen überträgst.
oder du verwendest die R1C1-Addressierungsart, weil hierbei die relativen Zellbezüge auch relativ beschrieben werden und daher keine Anpassung notwendig ist:

Range("O3").FormulaR1C1Local = "=MeineFunktion(ZS10;ZS7;ZS12;ZS14)"
Range("O4").FormulaR1C1Local = "=MeineFunktion(ZS10;ZS7;ZS12;ZS14)"

da nach dem Z in der Zelladresse keine Zeile angegeben ist, bezieht sich der Bezug auf die Zelle in der gleichen Zeile, in welcher auch die Formel steht.
Gruß Daniel
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 14:42:09
Fingayn
Hallo Daniel,
Ich hab grade die ganze Zeit versucht, deinen Vorschlag mal einzubauen, aber irgendwie bekomme ich das nicht richtig hin... also seperiert klappt das in einer Testdatei ziemlich gut, aber noch nicht im eingebetteten Macro... Da funktioniert es noch nicht, das er in "=MeineFunktion(...)" die Zeilen mit anpasst...
Wie macht man das am besten? Hier mal mein aktueller Code:
'Preis GP
Dim u As Integer, Fml As String
For u = 1 To Cells(Rows.Count, 1).End(xlUp).Row
Select Case Cells(u, 1)
Case ""
Fml = ""
Case Else
Fml = "=MeineFunktion(Ju;Gu;Lu;Nu)"
End Select
With Cells(u, 15)
.FormulaLocal = Fml
End With
Next u
Und hier MeineFunktion:
Function MeineFunktion(pos As String, zahlung As String, v12, v14)
Dim GP
Select Case pos
Case "Position"
Select Case zahlung
'alles groß
Case ""
GP = "0"
Case "Bei Bedarf"
GP = v12 * v14
Case "Laufend"
GP = v12 * v14
Case "Vierteljährlich"
GP = v12 * v14 / 0.25
Case "Halbjährlich"
GP = v12 * v14 / 0.5
Case "1/4 Jährlich"
GP = v12 * v14 / 0.25
Case "1/2 Jährlich"
GP = v12 * v14 / 0.5
Case "Jährlich"
GP = v12 * v14 / 1
Case "Alle 2 Jahre"
GP = v12 * v14 / 2
Case "Alle 3 Jahre"
GP = v12 * v14 / 3
Case "Alle 4 Jahre"
GP = v12 * v14 / 4
Case "Alle 5 Jahre"
GP = v12 * v14 / 5
Case "Alle 6 Jahre"
GP = v12 * v14 / 6
Case "Alle 10 Jahre"
GP = v12 * v14 / 10
Case "Alle 12,5 Jahre"
GP = v12 * v14 / 12.5
Case "Alle 25 Jahre"
GP = v12 * v14 / 25
'alles klein
Case ""
GP = "0"
Case "bei bedarf"
GP = v12 * v14
Case "laufend"
GP = v12 * v14
Case "vierteljährlich"
GP = v12 * v14 / 0.25
Case "halbjährlich"
GP = v12 * v14 / 0.5
Case "1/4 jährlich"
GP = v12 * v14 / 0.25
Case "1/2 jährlich"
GP = v12 * v14 / 0.5
Case "jährlich"
GP = v12 * v14 / 1
Case "alle 2 jahre"
GP = v12 * v14 / 2
Case "alle 3 jahre"
GP = v12 * v14 / 3
Case "alle 4 jahre"
GP = v12 * v14 / 4
Case "alle 5 jahre"
GP = v12 * v14 / 5
Case "alle 6 jahre"
GP = v12 * v14 / 6
Case "alle 10 jahre"
GP = v12 * v14 / 10
Case "alle 12,5 jahre"
GP = v12 * v14 / 12.5
Case "alle 25 jahre"
GP = v12 * v14 / 25
'1. groß, 2. klein
Case "Bei bedarf"
GP = v12 * v14
Case "Alle 2 jahre"
GP = v12 * v14 / 2
Case "Alle 3 jahre"
GP = v12 * v14 / 3
Case "Alle 4 jahre"
GP = v12 * v14 / 4
Case "Alle 5 jahre"
GP = v12 * v14 / 5
Case "Alle 6 jahre"
GP = v12 * v14 / 6
Case "Alle 10 jahre"
GP = v12 * v14 / 10
Case "Alle 12,5 jahre"
GP = v12 * v14 / 12.5
Case "Alle 25 jahre"
GP = v12 * v14 / 25
'1. klein, 2. groß
Case "bei Bedarf"
GP = v12 * v14
Case "alle 2 Jahre"
GP = v12 * v14 / 2
Case "alle 3 Jahre"
GP = v12 * v14 / 3
Case "alle 4 Jahre"
GP = v12 * v14 / 4
Case "alle 5 Jahre"
GP = v12 * v14 / 5
Case "alle 6 Jahre"
GP = v12 * v14 / 6
Case "alle 10 Jahre"
GP = v12 * v14 / 10
Case "alle 12,5 Jahre"
GP = v12 * v14 / 12.5
Case "alle 25 Jahre"
GP = v12 * v14 / 25
End Select
Case "Bedarfsposition"
GP = 0
End Select
MeineFunktion = GP
End Function
Danke für die Hilfe!
LG Lars
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 15:47:44
MatthiasG
Schreib die Formel doch von Hand rein und ziehe sie nach unten
Was spricht dagegen?
Gruß Matthias
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 15:58:41
Fingayn
Hallo Matthias,
Die Datei wird nach dem Macro nicht mehr bearbeite... (Außer halt in der Spalte N). Deswegen kann ich das nicht per Hand machen. Die andere Sache ist, dass ganz schön viele Dateien mit dem Macro umgewandelt werden sollen und bei über hundert Dateien ist das müßig die Formel noch per Hand einzutragen...
LG Lars
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 21:43:33
MatthiasG
Hallo Lars,
bei über hundert Dateien?
Da müsstest du ja dafür auch ein Programm scheiben, was den Code in Alle Dateien einfügt. Oder machst du das manuell?
Vielleicht solltest du ein Add-In basteln...
Und zum Code:
kennst du nicht die Funktionen LCase() und UCase()? Dann musst du nicht alles dreimal abfragen (alles klein, 1. groß/2. klein, ....).
Insgesamt hab ich grad auch den Überblick verloren, was du eigentlich vor hast.
Und Daniel hat Recht: Ändere mal deinen Kenntnis-Level! Unter "VBA gut - Excel gut" stelle ich mir auch was anderes vor.
Gruß Matthias
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
29.09.2016 08:39:21
Fingayn
Hallo Matthias,
Hab auf die Nachricht von Daniel geantwortet. Da ich nicht weiß, ob du es sehen kannst hier der Hinweis;-)
LG Lars
AW: Formeln mit Case "..." in Zellen eintragen
23.09.2016 16:10:37
Daniel
Hi
muss man jemanden mit VBA-gut erklären, wie man Text und Variablen verbindet?
Bei VBA-gut gehe ich eigentlich davon aus, dass dieses Basiswissen vorhanden ist.
Außerdem schrieb ich ja, dass man es so ja nicht machen muss, sondern dass man die Formel in alle Zellen gleichzeitig schreiben kann es dann nicht braucht, weil es dann ausreicht, die Formel für die erste Zelle korrekt zu schreiben und es dann für weiteren entsprechend übernommen wird.
Es ist auch viel schneller, wenn man in alle Zellen die gleiche Formel in einem Schritt überträgt, als jede Zelle einzeln zu befüllen.
Die Bedingungsprüfung sollte man dann in die Formel mit aufnehmen:
'Preis GP
Cells(1, 15).Resize(Cells(Rows.Count, 1).End(xlUp).Row).FormulaLocal = "=Wenn(A1="""";"""";MeineFunktion(J1;G1;L1;N1))"
Gruß Daniel
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
29.09.2016 08:37:49
Fingayn
Hallo Daniel, Hallo Matthias,
Ihr hab recht, meine Kenntnisse in VBA sind anscheinend noch mehr als lückenhaft-.- Und ich dachte ich wäre halbwegs fit darin... "Wer nur den Fluss kennt, sollte nicht übers Meer reden" ...meine Fehler... Dann bekommt man halt auch Antworten die man nicht versteht... Aber auf jeden Fall danke für eure Mühen!:-)
@Daniel:
Ich probier das mal so aus wie du es vorgeschlagen hast.
@Matthias:
Ich versuche ein Macro zu schreiben, welches eine (Immer gleiche) vorhandene Excel-Tabelle in eine andere umwandelt. Diese vorhandene Tabelle soll ich so formatieren, dass sie am Ende nur noch in einer einzigen Spalte eingetragen werden kann, sprich jemand anderes da seine Daten einträgt und die Tabelle dann das Ergebnis in der Spalte ausspuckt, die ich die ganze Zeit zu formatieren versuche. Ich hab für das Endergebnis eine Mustertabelle als Vorlage und die Ursprungsdatei als Grundlage bekommen und soll dann ein Macro schreiben, welches alle neu ankommenden Ursprungsdateien in die Form der Mustertabelle bringt. Da nicht klar ist, ob dieses Bearbeiten immer in meinen Aufgabenbereich fällt, soll es halt alles vollständig selber machen; sprich Idiotensicher sein.
Was mein Macro bis jetzt macht:
- es fügt einige Spalten neu ein,
- weiterer Kleinkram wie Beschriften, neu speichern, Umformatieren, etc...
Was ich halt leider nicht hinbekomme, ist die eine besagte Spalte so zu formatieren, dass sie eine Rechnung abhängig von Parametern in den Spalten davor macht. Bis jetzt frage ich die Parameter, in Ermangelung besseren Wissens, alle einzeln ab (wie du ja auch angemerkt hast;-)) und versuche dann eine Formel in die Zellen zu schreiben, wo in Spalte 1 etwas steht (jede relevante Komponente wird in Spalte 1 benannt, weswegen alle anderen Zeilen in der betroffenen Spalte auch keine Formel brauchen). Ursprünglich hatte ich die Formel auch in meinem Code stehen, aber auf anraten dieses Forums habe ich eine Funktion draus gemacht. Das war dann der Punkt, wo mein eigenes Wissen aufhörte und ich nicht mehr hinterher kam... Ich denke ich probier noch ein wenig rum, ob ich das mit den neuen Anregungen ans laufen bekommen, ansonsten muss ich wohl erstmal in den sauren Apfel beißen und das heute per Hand einfügen um später weiter dran rum zu tüfteln..;-)
Sorry dass ich erst so spät antworte, ich hatte die Tage frei und hab deswegen den Rechner nicht angehabt;-)
Liebe Grüße
Lars
Anzeige
AW: Formeln mit Case "..." in Zellen eintragen
29.09.2016 08:46:20
Fingayn
Hallo Daniel,
Ich hab zwar immernoch keine Ahnung, was genau dein Code-Schnipsel eigentlich macht, aber er funktioniert bestens! *JAUCHTS* :-D
Ich danke dir!
LG Lars
;
Anzeige
Anzeige

Infobox / Tutorial

Formeln mit Case-Funktion in Excel eintragen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)", wähle "Einfügen" und dann "Modul".
  3. Füge den Code ein:

    • Kopiere den folgenden Code in das Modul:
    Function MeineFunktion(pos As String, zahlung As String, v12 As Double, v14 As Double) As Double
       Dim GP As Double
       Select Case pos
           Case "Position"
               Select Case zahlung
                   Case "" 
                       GP = 0
                   Case "bei Bedarf"
                       GP = v12 * v14
                   Case "laufend"
                       GP = v12 * v14
                   Case "vierteljährlich"
                       GP = v12 * v14 / 0.25
                   ' Weitere Fälle hier hinzufügen
               End Select
           Case "Bedarfsposition"
               GP = 0
       End Select
       MeineFunktion = GP
    End Function
  4. Verwende die Funktion in einer Zelle:

    • In Zelle O3 kannst du jetzt die Funktion wie folgt verwenden:
      =MeineFunktion(J3; G3; L3; N3)
  5. Formel für mehrere Zellen einfügen:

    • Um die Formel für mehrere Zellen anzuwenden, kannst du den folgenden Code verwenden:
    Dim u As Integer
    For u = 3 To 100 ' Beispiel für Zeilen 3 bis 100
       Cells(u, 15).FormulaLocal = "=MeineFunktion(J" & u & ";G" & u & ";L" & u & ";N" & u & ")"
    Next u

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004:

    • Dieser Fehler tritt auf, wenn die Formel nicht korrekt in die Zelle eingefügt wird. Stelle sicher, dass du die richtige Schreibweise für die Formel verwendest. Nutze FormulaLocal für deutsche Excel-Versionen.
  • Formel wird nicht aktualisiert:

    • Wenn die Formel nicht automatisch aktualisiert wird, prüfe, ob die Zellen, auf die verwiesen wird, tatsächlich Werte enthalten.

Alternative Methoden

  • Direkte Eingabe in Zellen:

    • Eine einfache Methode ist das manuelle Eingeben der Formel in die Zellen und das anschließende Herunterziehen, um die Formel in die nachfolgenden Zellen zu kopieren.
  • Nutzung von R1C1-Notation:

    • Du kannst auch die R1C1-Notation verwenden, um die Formeln effizienter zu schreiben, z.B.:
    Cells(u, 15).FormulaR1C1Local = "=MeineFunktion(RC[-5];RC[-8];RC[-3];RC[-1])"

Praktische Beispiele

  • Berechnung von Zahlungen:

    • Angenommen, in Spalte J stehen die Positionen, G die Zahlungen, L die Werte für v12, und N die Werte für v14. Verwende die MeineFunktion wie gezeigt, um automatisch die Zahlungen zu berechnen.
  • Formeln mit verschiedenen Bedingungen:

    • Du kannst die Funktion erweitern, um noch mehr Bedingungen zu berücksichtigen, wie z.B. unterschiedliche Zahlungszyklen.

Tipps für Profis

  • Optimierung der Funktion:

    • Verwende LCase() und UCase(), um die Eingaben zu normalisieren und so die Anzahl der Case-Bedingungen zu reduzieren.
  • Fehlerbehandlung einfügen:

    • Implementiere Fehlerbehandlungsroutinen in deine VBA-Funktion, um unerwartete Eingaben abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich die Funktion anpassen, um weitere Bedingungen hinzuzufügen? Du kannst einfach weitere Case-Bedingungen in der Funktion MeineFunktion hinzufügen, um zusätzliche Zahlungstypen zu berücksichtigen.

2. Funktioniert dies auch in anderen Excel-Versionen? Die gezeigten Methoden sollten in den meisten Excel-Versionen funktionieren, allerdings können einige Details je nach Spracheinstellungen variieren.

3. Wie kann ich die Leistung meines VBA-Codes verbessern? Vermeide unnötige Berechnungen und ziehe in Betracht, Arrays zu verwenden, um die Verarbeitungsgeschwindigkeit zu erhöhen, besonders bei größeren Datenmengen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige