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

Logischer Fehler in eigener Funktion

Logischer Fehler in eigener Funktion
14.05.2017 21:29:45
Florian
Hallöchen
Ich habe mir eine Funktion geschrieben, diese soll folgendes tun.
Anhand eines Dropdown Menüs mit Monatsnamen, errechnen des ersten und letzten Tages dieses Monats dieses und letztes Jahr.
Dann anhand dieser vier Daten die Differenz aus einer Umsatztabelle errechnen.
Also ich wähle Januar aus und meine Funktion errechnet mir die Differenz des Umsatzes Januar2017 zu Januar2016.
Leider ist das Ergebnis kompletter Murks.
Mittels Debug.Print NameMonat habe ich herausgefunden, dass die Funktion beim Wechsel des Monates scheinbar zweimal läuft.
Jedoch weiß ich nicht warum, und auch dann macht das Ergebnis keinen Sinn.
Also vermute ich einen logischen Fehler.
Hier die Datei als xlsm:
https://www.herber.de/bbs/user/113579.xlsm

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Logischer Fehler in eigener Funktion
15.05.2017 01:55:46
Daniel
Hi
Datum2 ist falsch deklariert, das müsste auch Date sein und nicht String.
Gruß Daniel
AW: Logischer Fehler in eigener Funktion
15.05.2017 11:44:35
Florian
Ups, so was bescheuertes. Ich teste nachher mal in Ruhe, aber auf den ersten Blick, scheint es so zu laufen wie es soll.
Jetzt noch 2 Fragen:
1. Wenn ich möchte, dass der Dropdown Standartmäßig auf "akuteller Monat" steht, gibt es da eine andere Möglichkeit als im Worksheet_Activate (oder Change) Ereignis?
Also eine Enstellmöglichkeit am Button selbst?
2.
Macht das was ich da zusammengeschrieben habe überhaupt sinn? Oder geht das mit Excel "Bordmitteln" sehr viel effizienter?
Anzeige
AW: Logischer Fehler in eigener Funktion
15.05.2017 12:17:43
Daniel
Hi
ich würde mal sagen, mit "Bordmitteln" (=Formeln) geht das effizienter.
wenn du den Monat als Zahl von 1 bis 12 eingibst, ließe sich die Differenz relativ einfach mit Hilfe von SummeWenns berechnen, nach dem Prinzip:
=SummeWenns(WerteSpalte;DatumSpalte;">="&Datum(2017;Monat;1);DatumSpalte;"="&Datum(2016;Monat;1);DatumSpalte;" Da du 2 Wertespalten hast, eben 2x
VBA-Code ist dann nicht notwendig.
Die Formeln werden dann bei einer Neueingabe des Monats automatisch neu berechnet.
Gruß
AW: Logischer Fehler in eigener Funktion
15.05.2017 15:48:35
Florian
Na toll.
Jetzt war ich so stolz auf meine erste eigene Funktion und sie ist Muckefuck :(
Also meinst du eine Hilfszeile =Wenn(ZellemitDatum="Dezember";12)
und die entsprechende Formel ist sinnvoller.
Würde ich denn einen Geschwindigkeitsunterschied merken?
Eher nicht, oder?
Anzeige
AW: Logischer Fehler in eigener Funktion
15.05.2017 17:16:01
Daniel
Hi
ja, im Prinzip.
Aber nicht mit 12x Wenn, höchsten mit Hilfsspalte und SVerweis oder Vergleich.
Andererseits, Excel ist auch in der Lage, einen Text wie "1. Januar 2017" in ein Datum zu wandeln.
Dh. wenn In A1 "Januar" steht, ergibt die Formel =Monat("1. " & A1 & " 2017) die 1 für den ersten Monat.
Das könntest du natürlich auch in deine Formeln einbauen.
Dein SummeWenns funktioniert auch mit dem Datumstext (sofern er korrekt geschrieben ist)
=SummeWenns(Wertespalte;Datumspalte;">=1. "&A1&" 2017")
so dass die Umwandlung in eine Zahl eigentlich nicht notwendig wäre.
Problem ist aber das Monatsende, welches ja von 28-31 variabel ist.
Hier kann man dann einfacher mit "kleiner als 1. des Folgemonats" arbeiten und wenn der Monat als Zahl vorliegt, lässt dieser sich einfach mit +1 in der Datumsfunktion errechnen. Das funktioniert auch über den Monatswechsel, die Funktion Datum(2017, 12+1, 1) ergibt den 1.1.2018.
Das wird, wenn du mit den Monatstexten arbeitest, aufwendiger.
Ansonsten gilt halt, Excelformeln können viel, oftmals mehr als man denkt.
Aber wenn man das Programmieren lernen will, dann ist ja auch durchaus sinnvoll, erstmal mit einfacheren Projekten anzufangen, für die es vielleicht auch alternative Lösungsansätze gibt.
Wenn man beides mal ausprobiert, bekommt man auch ein Gespür dafür, wann es sinnvoller ist mit Formeln zu arbeiten und dann eine VBA-Programmierung besser ist.
Gruß Daniel
Anzeige
AW: Logischer Fehler in eigener Funktion
16.05.2017 09:04:40
Florian
Danke für die ausführliche Erläuterung :)
Dann lasse ich meine Funktion mal als "funktioniert zwar, ist aber komplizierter als nötig" stehen und werkel hier noch ein wenig dran rum.
So will ich mir jetzt in die Spalte neben der markierten, diesen Wert noch prozentual ausrechnen lassen.
Wenn ich diese nur genug erweitere (habe ich einiges zum googlen und lernen) und vielleicht entwickelt sie ja auch irgendwann eine daseinsberechtigung :)
AW: Logischer Fehler in eigener Funktion
16.05.2017 09:30:09
Florian
Hmpf, ich bräcuhte diesbezüglich nochmal Hilfe.
Um die Zelle "rechts daneben" zu beschreiben habe ich testweise:
ActiveCell.Offset(0, 1) = "abc" und Offset(0,1 ).Value = "abc"

eingefügt, jedoch liefert meine Formel selbst dann kein Ergebnis mehr und auch die betroffene Zelle bleibt leer.
Dannach habe ich
rng.Offset(0, 1) = "abc"
und das ganze mit Value versucht.
Würde mir zwar nicht das Ergebnis liefern, welches ich gerne hätte (weil falsche Zelle), aber auch hier ist das Ergebnis der Formel nur #WERT und die Offset Zelle bleibt leer.
Was muss ich denn anstellen um eine zweite Zelle zu beschreiben?
Anzeige
AW: Logischer Fehler in eigener Funktion
16.05.2017 12:19:51
Daniel
Hi
ich hab jetzt keinen Plan was du willst und wie das mit der ursprünglichen Frage zusammen hängen soll.
aus dem Text "abc" kann Excel kein Datum erzeugen.
Gruß Daniel
AW: Logischer Fehler in eigener Funktion
16.05.2017 13:42:16
Florian
Das erklärt sich am einfachsten anhand eines Beispieles
In L2 steht der Monatsname.
Dann schreibe ich in die Zeile L3 meine folgende Formel:
=MonatDiff(L2)

nun habe ich in L3 die entsprechende Differenz.
Darüber hinaus möchte ich noch die Zelle rechts von L3 füllen - also M3.
Dafür das Beispiel mit "abc" - natürlich soll der Inhalt ein anderer (nämlich mein Formelergebnis in %) sein, abc war nur ein Test.
Anzeige
AW: Logischer Fehler in eigener Funktion
17.05.2017 10:34:27
Daniel
warum dort nicht einfach die Formel eintragne, die den entsprechenden Wert berechnet?
Gruß Daniel
AW: Logischer Fehler in eigener Funktion
17.05.2017 13:49:41
Florian
Geht natürlich auch.
Die Grundrechenschritte sind ja aber die gleichen.
Deswegen wäre eine Formel ja eigentlich effektiver.
AW: Logischer Fehler in eigener Funktion
17.05.2017 16:57:41
Florian
Also das "Problem" bzw. meine Überlegung ist, dass ich zur Berechnung des Prozentualen unterschieds ja exakt den gleichen Rechen- und auch "Suchweg" der Einzelsummen benötige.
Der einzige Unterschied ist, dass ich bei Variante 1 zwei Summen subtrahiere, bei Variante 2 werden diese dividiert.
Ich würde also, wenn ich denn zwei Formeln schreibe, zwei mal exakt die gleiche Formel schreiben.
Das wollte ich vermeiden, wenn es denn möglich ist.
Jedoch schaffte ich es einfach nicht, mehr als eine Zelle mit meiner Funktion zu beschreiben.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige