Kann mir jemand beim Excelmakro helfen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich sehe es wie suboptimierer - ich würde (s. Bild) in einer Spalte anzeigen lassen, ob es Vertragsverlängerungen gibt. Diese dann als Wert in Spalte A wieder einfügen.

Per Makro wäre es im Grund ein Dreizeiler

Sub verlaengerung()
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'ab Zeile 2 bis zur letzten benutzten Zeile in Spalte 1 = Spalte A
If Date > Range("D" & i).Value Then Range("a" & i).Value = WorksheetFunction.EDate(Range("A" & i), Range("C" & i))
Next
End Sub

Neben der Berechnung, ob es schon zu einer Vertragsverlängerung gekommen ist, ist bei deinem Fall nur ein weiterer Wert zu berechnen, der Kündigungstermin. Diesen könnte man unabhängig davon, ob die Vertragsverlängerung per Formel oder Makro ermittelt wird, mit edatum(A2;-B2) ermitteln oder hast Du das schon abgebildet?

 - (Computer, Microsoft Excel)
Cappa90 
Beitragsersteller
 11.11.2016, 12:57

Okay Makro macht also keinerlei Sinn.

So in etwa wie auf dem Bild dargestellt habe ich es mir vorgestellt ; Allerdings dass es keine Neue Spalte für das Vertragsende gibt, sondern, dass sich die eigentlich Spalte Vertragsende einfach aktualisiert.

Ninombre  11.11.2016, 18:17
@Cappa90

Ich habe nicht gesagt, dass das Makro keinen Sinn macht.

Formeln in Excel haben eine klare Einschränkung: Sie wirken immer nur auf die Zelle, in der sie stehen. Man kann damit keine Werte in anderen Zellen überschreiben. Das genau aber schwebt Dir vor: Du willst einen festen Anfangswert für den Vertragsablauf haben und diesen dann mit einem neuen Wert überschreiben. Wenn es genau in dieser Form sein soll, geht es nur per Makro. Das Makro habe ich oben auch genannt - mehr ist es nicht.

Mein Einwand: Wenn Du ohnehin manuell in der Tabelle arbeitest, um die nicht mehr benötigten Verträge zu löschen, dann könntest Du auch einfach die per Formel berechneten neuen Vertragslaufzeiten kopieren und überschreiben. Makros haben schlichtweg den Nachteil, dass man prüfen muss, ob sie richtig funktionieren, sonst kommt nur Chaos dabei raus.

Dafür brauchst du doch kein Makro, das lässt sich doch alles per Formel in der Tabelle erledigen.
Wenn du noch ein wenig Infos gibst könnte man mit konkreten Formeln helfen.

Ansonten musst du dir auch überlegen wie du das Ganze nachvollziehbar dokumentierst, Excel ist keine Datenbank.
So kann eine einfache Formel zwar automatisch ab dem 1.1.2017 das Vertragsende 30.06.2018 anzeigen, sofern bei Kündigung nicht "ja" steht.
Aber was passiert wenn du 2020 dann die Kündigung auf "ja" setzt, dann würde diese Formel plötzlich zurückspingen und Mitte 2017 als Enddatum errechnen.
Statt "ja" muss also auch klar hinterlegt sind gekündigt zum Datum....
Und man sollte sich überlegen ob man einfach das Enddatum aktulisiert oder ob ein Datenblatt nicht automatisch jedes Vertragsjahr neu und explizit auflistet (in der Form 3. automatische Verlängerung galt bis 30.06.2016, die 4. bis 30.06.2017 usw usw.) in der Schnellübersicht wird dann nur der Maximalwert des Endes aufgerufen und ist somit aktuell - aber man kann die genaue Laufzeit bei Bedarf noch schnell einsehen.

Cappa90 
Beitragsersteller
 11.11.2016, 12:54

Hallo,
Die Liste wird lediglich der Übersichtshalber benutzt. Gekündigte Verträge werden händisch daraus entfernt.
Deswegen ist letzteres schonmal nicht nötig.

Zu 1.
Es ist nicht wichtig obs dann zurückspringt.Dafür gäbe es dann andere Programme. Der Reiter Kündigung soll auch nicht Auslöser des "Wenns sein ", sondern der Reiter "Verlängerungsoptionen" in denen mit Ja oder nein geantwortet wird.

Was  für Daten werden denn noch benötigt? Ist es denn auch möglich die Formel für die Ganze Spalte zu kontruieren oder muss z.b.  in der ersten immer A1...B1 in der 5. dann A5 ect. pp reingeschrieben werden?

Aktuelles Vertragsende ist Spalte I

Kündigungsfrist in Monaten Spalte L

Datum Kündigung Spalze M

VerlängerungsOption Spalte N

Verlängerungszeitraum in Monaten Spalte O

Wenn ich mir dein Sheet im geistigen Auge vorstelle, sehe ich keine Notwendigkeit, auf Makros zurück zu greifen. Die Dynamik enthält das Sheet durch die Funktion HEUTE(). 

Mittels EDATUM kannst du Monate aufaddieren, mit JAHR, MONAT und TAG ein Datum zerpflücken und mit DATUM zusammensetzen. Mit WENN kannst du Fallunterscheidungen realisieren, die z. B. auf das Jahr einen drauf rechnen, wenn das heutige Datum + Kündigungsfrist das Kündigungsdatum dieses Jahrs überschreiten würde.

Wo genau hapert es? Hast du einen Fehler? Was genau meinst du nur, mittels eines Makros lösen zu können?

Cappa90 
Beitragsersteller
 14.11.2016, 09:06

Erstmal danke für die Antworten.
Auch wenn mein Nickname auf A endet, bin ich männlicher Natur ;)
Es ist ähnlich, wie Iamiam vermutet hat. Es geht um die Arbeit. Allerdings isses nicht so, dass mir diese Aufgabe gestellt wurde. Es ist lediglich eine sehr stumpfe Aufgabe, die zwischendurch der Übersichtshalber passieren muss und somit einfach Zeit frisst, welches ich umgehen möchte. Allerdings weisen sämtliche Kollegen/Kolleginnen ähnliches Geschick mit Excel auf, sodass ich da keine Hilfe erwarten kann.Somit konnte ich mir nicht einfach nen "einfacheres Beispiel" suchen, weil dies mir nicht helfen würde ;)

Aus der Formel, werde ich leider nicht so richtig schlau..

Cappa90 
Beitragsersteller
 11.11.2016, 12:23

Ich bin wirklich ein totaler Anfänger was das betrifft. Ich fürchte Makro war die falsche Begrifflichkeit, die ich dafür gewählt habe.

Ich brauche lediglich eine Funktion, die das oben dagestellte löst.Das was du geschrieben hast, hört sich schonmal vielversprechend an; Allerdings haperts bei mir bereits dadrin, wo und wie ich das von dir geschriebene umsetze.

Suboptimierer  11.11.2016, 13:09
@Cappa90

Du musst dir überlegen, was deine Stammdaten sind und welche Daten du errechnen willst. Wie ich das sehe, sind "Datum Vertragsabschluss", "Kündigungsfrist" und "Kündigungsverlängerung".

Wenn Vertragsabschluss z. B. in A2 steht, Kündigungsfrist in B2 steht und die Verlängerung in C2 könntest du so beginnen

Dann ist der nächste Kündigungstermin

D2: =MIN(WENN(EDATUM(A2:A2;C2*ZEILE($1:$100))>EDATUM(HEUTE();B2);EDATUM(A2:A2;C2*ZEILE($1:$100));EDATUM(A2:A2;12*101)))
  • Nur ein Ansatz
  • Matrixformel → Die Eingabe muss mit Strg+Shift+Enter abgeschlossen werden
  • Es werden in einer Matrix intern alle Datumswerte dargestellt, die um die Verlängerung iterativ erhöht vom Vertragsdatum an größer sind als das heutige Datum + Kündigungsfrist und davon wird das Minimum genommen.
______________

Tipp: Wenn eine Formel zu umfangreich wird, splitte sie auf mehrere Zellen auf.

PS: Wenn du Anfängerin bist, wäre es dann nicht klüger, mit einem einfacheren Beispiel zu beginnen? -.-

Iamiam  13.11.2016, 00:40
@Suboptimierer

@ Subopt: ich nehme an, sie hat auf Arbeit das als Aufgabe bekommen, sozusagen schaung mer mal, wie die damit zrechtkommt! Wahrscheinlich haben sich andere daran schon die Zähne ausgebissen mit der rekursiven Funktion der Verlängerung der Verlängerung. Auch ich muss Deine Lösung erst mal nachvollziehen, um sie zu verstehen (zumindest das erstere empfehle ich der Fragestellerin auch, ich machs aber erst morgen (bzw ist ja schon, also heute viel später...)

Suboptimierer  13.11.2016, 00:46
@Iamiam

Ich suchte nach einer Funktion wie VRUNDEN, weil VRUNDEN nicht mit EDATUM funktioniert. Kann sein, dass ich es mir zu kompliziert gemacht habe.