Clever-Excel-Forum

Normale Version: Case-Select verkürzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

wie kann ich den folgenden Code verkürzen, damit ich nur Startmonat und Jahr eingeben muß?

Code:
Select Case Cells(1, "D").Value
   Case "Mai 2014"
      Mon = 0
   Case "Juni 2014"
      Mon = 1
   Case "Juli 2014"
      Mon = 2
   Case "August 2014"
      Mon = 3
   Case "September 2014"
      Mon = 4
   Case "Oktober 2014"
      Mon = 5
   Case "November 2014"
      Mon = 6
   Case "Dezember 2014"
      Mon = 7
   Case "Januar 2015"
      Mon = 8
   Case "Februar 2015"
      Mon = 9
   Case "März 2015"
      Mon = 10
   Case "April 2015"
      Mon = 11
   Case "Mai 2015"
      Mon = 12
   Case "Juni 2015"
      Mon = 13
   Case "Juli 2015"
      Mon = 14
   Case "August 2015"
      Mon = 15
   Case "September 2015"
      Mon = 16
   Case "Oktober 2015"
      Mon = 17
   Case "November 2015"
      Mon = 18
   Case "Dezember 2015"
      Mon = 19
   Case "Januar 2016"
      Mon = 20
   Case "Februar 2016"
      Mon = 21
   Case "März 2016"
      Mon = 22
   Case "April 2016"
      Mon = 23
   Case "Mai 2016"
      Mon = 24
   Case "Juni 2016"
      Mon = 25
      ' Case <== hier weitere Bedingungen
   End Select
Hallo Ralf

Wenn man die Eingabe in ein Datum wandeln könnte, dann könnte man die Differenz der Monate zum 01.05.2014 errechnen.
Den Code muß ich leider schuldig bleiben.
Hallo Ralf,

wenn in der Zelle ein Datum steht,
dann ginge so etwas:

Code:
Sub test()
   Dim datTim1 As Date
   Dim datTim2 As Date
   datTim1 = "1/1/2014"
   datTim2 = Cells(1, "D").Value
   MsgBox DateDiff("m", datTim1, datTim2)
   'statt MgBox
   'Mon = DateDiff("m", datTim1, datTim2)
End Sub
Hallo Ralf,

z.B. so:
Code:
Mon = Fix((CDate(Cells(1, "D").Value) - CDate("Mai 2014")) / 30)
Hallo Uwe

Division durch 30? Ist das nicht zu ungenau?
Hi Detlef und Atilla,

ja, das ist eine gute Idee.

(15.05.2014, 21:09)atilla schrieb: [ -> ]wenn in der Zelle ein Datum steht,
dann ginge so etwas:

das könnte gehen.

So sieht die Tabelle aus:
Arbeitsblatt mit dem Namen 'Auswertung Tanksystem'
 BCDEF
1     
2 Mai. 14Jun. 14Jul. 14
3FunctionalRequirement977979
4Status04146

ZelleFormatWert
D2[$-407]MMM. JJ;@01.05.2014
E2[$-407]MMM. JJ;@30.06.2014
F2[$-407]MMM. JJ;@31.07.2014

ZelleFormel
E2=MONATSENDE(D2;1)
F2=MONATSENDE(E2;1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Wie kann ich da stattdessen immer den Monatsanfang haben?

Ich muß ja nun im Makro das aktuelle Datum immer mit dem Datum vergleichen, das in Zeile 2 steht, um wissen zu können, in welche Spalte ich den Wert eintragen muß.


PS:
Dies Obige auszulesen ging nicht mit Karin und Hajos Tool, das stürzte ab mit Fehler:
Zitat:Laufzeitfehler 1004:
Die Methode 'Range' mit Object '_Global' ist fehlgeschlagen.
Hallo Detlef,

ja, das könnte sein. Dann laut Atilla:
Code:
Mon = DateDiff("m", CDate("Mai 2014"), CDate(Cells(1, "D").Value))

Gruß Uwe
Hallo Ralf,

Zitat:Wie kann ich da stattdessen immer den Monatsanfang haben?

das brauchst Du nicht, da mit meinem Beispiel hier nur die Monate berücksichtigt werden.
Uwe hat mein Beispiel jetzt in einer Zeile zusammengefasst.
Hallo Uwe und Atilla,

hier nun den Einzeiler getestet:

Code:
Sub test()
'   Dim datTim1 As Date
'   Dim datTim2 As Date
'   datTim1 = "1/1/2014"
'   datTim2 = Cells(2, "D").Value
'   MsgBox DateDiff("m", datTim1, datTim2)
'   'statt MgBox
'   'Mon = DateDiff("m", datTim1, datTim2)

Mon = DateDiff("m", CDate("Mai 2014"), CDate(Cells(2, "D").Value))
MsgBox Mon

End Sub

mit dieser Tabelle geht es:

Arbeitsblatt mit dem Namen 'Auswertung Tanksystem'
BCDEF
1
2 Mai. 14Jun. 14Jul. 14
3FunctionalRequirement977979
4Status04146

ZelleFormatWert
D2[$-407]MMM. JJ;@01.05.2014
E2[$-407]MMM. JJ;@30.06.2014
F2[$-407]MMM. JJ;@31.07.2014

ZelleFormel
E2=MONATSENDE(D2;1)
F2=MONATSENDE(E2;1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hallo Ralf,

probiere es doch mal mit Cells(2, "D") oder besser Cells(2, 4) ! ;)

Gruß Uwe
Seiten: 1 2