Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Case-Select verkürzen
#1
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
Antworten Top
#2
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.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
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
Gruß Atilla
Antworten Top
#4
Hallo Ralf,

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

Division durch 30? Ist das nicht zu ungenau?
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#6
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.
Antworten Top
#7
Hallo Detlef,

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

Gruß Uwe
Antworten Top
#8
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.
Gruß Atilla
Antworten Top
#9
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
Antworten Top
#10
Hallo Ralf,

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

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste