Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


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
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to 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!
... shift-del
Eine Mustertabelle hilft beim Helfen.
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
to 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

Excel 2007
to top
#4
Hallo Ralf,

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

Division durch 30? Ist das nicht zu ungenau?
Wir sehen uns!
... shift-del
Eine Mustertabelle hilft beim Helfen.
Excel Super-Funktionen: VERWEIS(), INDEX(), WAHL()
to 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.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to 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
to 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

Excel 2007
to 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
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#10
Hallo Ralf,

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

Gruß Uwe
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Warum funktioniert eine Case-Struktur nicht ? Icepic 14 220 02.12.2016, 15:50
Letzter Beitrag: Rabe
  Zellenformeln verkürzen durch Namen definieren (variable) Woofer 2 101 27.10.2016, 15:46
Letzter Beitrag: BoskoBiati
  sverweis case sensitiv Dude85 23 933 07.02.2016, 14:22
Letzter Beitrag: snb
  VBA Select case derhanfti 11 772 02.12.2015, 09:05
Letzter Beitrag: derhanfti
  Select Rudi 12 1.708 08.08.2015, 10:53
Letzter Beitrag: WergibtmirRat
  Frage zur Select case.... maine-coon 4 683 15.02.2015, 12:53
Letzter Beitrag: maine-coon

Gehe zu:


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