Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

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

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
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen