Registriert seit: 02.12.2016
	
 Version(en): 2010
	 
 
	
	
		Hallo Excelianer:innen, hier habe ich vor einiger Zeit beim gleiche Thema Hilfe erhalten siehe (Spalten kopieren zu Spaltenüberschrift) und verwende das Makro von Uwe. Nun wollte ich das ganze erweitern, leider ohne Erfolg.  Zusätzlich sollte noch ergänzt werden (Jahr- und Monatszahlen vaiabel):   vor 1600      zu      BEF 1600   um 1100      zu      ABT 1100    nach 1500    zu      AFT 1500   09 1300       zu      SEP 1300   1200           zu            1200 Leider bin ich mit den Formeln etwas überfordert  und bitte um Eure Hilfe. Gruss Martin
  
  Datum Test 1.xlsm (Größe: 317,53 KB / Downloads: 11)
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 03.04.2020
	
 Version(en): Office 365 und 2010
	 
 
	
	
		Hallo, versuche es einmal so: Code: 'in Modul 3 unten.....
  Select Case Right(.Cells(i, k), 4)         Case Is <= 1200         .Cells(i, j) = "BEF " & Right(.Cells(i, k), 4) 'usw. usw.         End Select
 Bei "um 1200" musst Du eben einen Zeitraum definieren z. B. >=1100 And <= 1300 oder wie auch immer. Den ersten Code - Schnipsel oben habe ich getestet und funktioniert. Grüße Norbert
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 02.12.2016
	
 Version(en): 2010
	 
 
	
	
		Guten Tag Norbert,   für die Hilfe. Leider bringt es mir eine Fehlermeldung. Unzulässiger oder nicht ausreichend definierter Verweiss bei     Select Case Right(.Cells(i, k), 4) Was mache ich falsch? Bitte nochmals um Hilfe. Gruss Martin
  
  Datum Test 1(1).xlsm (Größe: 316,77 KB / Downloads: 6)
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 28.08.2022
	
 Version(en): 365
	 
 
	
	
		Hi,
  da du vor dem .Cells einen Punkt stehen hast, muss es natürlich mit in den With-Block!
  Im Übrigen solltest du auch die anderen If-Anweisungen in Select Case umwandeln. Wäre viel übersichtlicher
	 
	
	
Gruß, Helmut
  Win10 - Office365 / MacOS - Office365
 
	
	
 
 
	
	
	
		
	Registriert seit: 21.12.2017
	
 Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
	 
 
	
		
		
		09.12.2022, 17:41 
(Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2022, 17:46 von LCohen.)
		
	 
	
		BY7#:
  =LET( a;AD7:AD16; x;RECHTS("01.01."&a;10); y;WECHSELN(WECHSELN(GROSS(TEXT(ERSETZEN(x;7;1;TEIL(x;7;1)+2);"T MMM JJJJ"));" 3";" 1");" 4";" 2"); z;WAHL(LÄNGE(a)-LÄNGE(WECHSELN(a;".";))+1;RECHTS(y;4);RECHTS(y;8);y); WENNFEHLER(VERWEIS(a;{"n"."u"."v"};{"AFT "."ABT "."BEF "});"")&z)
  nur ab dem Jahr 1000. Für Jahre davor bitte melden.
  Achtung: Nur neues Excel!
	 
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 02.12.2016
	
 Version(en): 2010
	 
 
	
	
		Guten Abend LCohen, besten Dank für Dein Beispiel. Interessanter Vorschlag. Leider arbeite ich immer noch mit Excel 2016. Trotzdem nochmals danke für die Hilfsbereitschaft. Gruss Martin
	 
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 21.12.2017
	
 Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
	 
 
	
		
		
		09.12.2022, 19:56 
(Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2022, 19:59 von LCohen.)
		
	 
	
		War auch nur Gehirnschmirgelgrundlage. Manchmal braucht man das. Etwas verkürzt ohne WAHL:
  =LET( a;AD7:AD16; x;RECHTS("01.01."&a;10); y;WECHSELN(WECHSELN(GROSS(TEXT(ERSETZEN(x;7;1;TEIL(x;7;1)+2);"T MMM JJJJ"));" 3";" 1");" 4";" 2"); z;RECHTS(y;(LÄNGE(a)-LÄNGE(WECHSELN(a;".";))+1)*4); WENNFEHLER(VERWEIS(a;{"n"."u"."v"};{"BEF "."ABT "."AFT "});"")&z)
	 
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 02.12.2016
	
 Version(en): 2010
	 
 
	
	
		Guten Abend Helmut, danke für die Info. Habe immer noch so meine Schwierigkeiten mit den If Aneisungen. Dein Typ :  "da du vor dem .Cells einen Punkt stehen hast, muss es natürlich mit in den With-Block" nicht so verständlich. 
  Dein Änderungsvorschlag "If-Anweisungen in Select Case umwandeln" ist sicher  von Vorteil, vor allem aber übersichtlicher.
  Hier wären für mich Beispiele besser. So könnte ich meinen Bildungs-Horizont erweitern. Nochmals Danke für deine Hilfbereischaft. mfg. Martin
	 
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 16.08.2020
	
 Version(en): Office 2024
	 
 
	
		
		
		10.12.2022, 13:55 
(Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2022, 13:55 von Egon12.)
		
	 
	
		Hallo Martin, teste mal.
  
  Datum Test 1.xlsm (Größe: 308,13 KB / Downloads: 17)
 Naja, mittels Select Case spart man an dieser Front nur wenig, da ja die jeweiligen Zuweisungen (1 Befehlszeile) bleiben. Deshalb ist es so ziemlich egal, ob If/Else oder Select Case. Gruß Uwe
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 28.08.2022
	
 Version(en): 365
	 
 
	
		
		
		10.12.2022, 16:23 
(Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2022, 16:25 von HKindler.)
		
	 
	
		Hi,  (10.12.2022, 13:55)Egon12 schrieb:  Naja, mittels Select Case spart man an dieser Front nur wenig, da ja die jeweiligen Zuweisungen (1 Befehlszeile) bleiben. Deshalb ist es so ziemlich egal, ob If/Else oder Select Case. dem möchte ich doch ein wenig widersprechen. Der bisherige Code mit  If Code: Sub Datum1()     Dim i As Long, j As Long, k As Long, Spalte1 As Range, Spalte2 As Range     'Geburts Datum     i = ActiveCell.Row     With Tabelle1         Set Spalte1 = .Rows(6).Find("Geburt-Datum")         If Not Spalte1 Is Nothing Then k = Spalte1.Column         Set Spalte2 = .Rows(6).Find("Geburt.-.Datum")         If Not Spalte2 Is Nothing Then j = Spalte2.Column         If Len(.Cells(i, k)) = 4 Then .Cells(i, j) = .Cells(i, k)         If Len(.Cells(i, k)) = 7 Then             If Left(.Cells(i, k), 2) = "01" Then                 .Cells(i, j) = "JAN " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "02" Then                 .Cells(i, j) = "FEB " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "03" Then                 .Cells(i, j) = "MRZ " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "04" Then                 .Cells(i, j) = "APR " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "05" Then                 .Cells(i, j) = "MAI " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "06" Then                 .Cells(i, j) = "JUN " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "07" Then                 .Cells(i, j) = "JUL " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "08" Then                 .Cells(i, j) = "AUG " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "09" Then                 .Cells(i, j) = "SEPT " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "10" Then                 .Cells(i, j) = "OKT " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "11" Then                 .Cells(i, j) = "NOV " & Right(.Cells(i, k), 4)             End If             If Left(.Cells(i, k), 2) = "12" Then                 .Cells(i, j) = "DEZ " & Right(.Cells(i, k), 4)             End If         Else             If Mid(.Cells(i, k), 4, 2) = "01" Then                 .Cells(i, j) = Left(.Cells(i, k), 2) & " JAN " & Right(.Cells(i, k), 4)             End If         End If         If Mid(.Cells(i, k), 4, 2) = "02" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " FEB " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "03" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " MRZ " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "04" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " APR " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "05" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " MAI " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "06" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " JUN " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "07" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " JUL " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "08" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " AUG " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "09" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " SEPT " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "10" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " OKT " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "11" Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " NOV " & Right(.Cells(i, k), 4)         End If         If Mid(.Cells(i, k), 4, 2) = "12 " Then             .Cells(i, j) = Left(.Cells(i, k), 2) & " DEZ " & Right(.Cells(i, k), 4)         End If          ' .............Der folgende Eintrag ändert die Tage 01  bis 09 nach 1 bis 9 .........                If Left(Range("BT" & i), 1) = "0" Then Range("BT" & i) = Mid(Range("BT" & i), 2, 20)         If Left(.Cells(i, k), 4) = "vor " Then             .Cells(i, j) = "BEF " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 5) = "nach " Then             .Cells(i, j) = "AFT " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 3) = "um " Then             .Cells(i, j) = "ABT " & Right(.Cells(i, k), 4)         End If              End With End Sub
 Mit  Select Case sieht das so aus  Code: Sub Datum2()     Dim i As Long, j As Long, k As Long, Spalte1 As Range, Spalte2 As Range     'Geburts Datum     i = ActiveCell.Row     With Tabelle1         Set Spalte1 = .Rows(6).Find("Geburt-Datum")         If Not Spalte1 Is Nothing Then k = Spalte1.Column         Set Spalte2 = .Rows(6).Find("Geburt.-.Datum")         If Not Spalte2 Is Nothing Then j = Spalte2.Column         If Len(.Cells(i, k)) = 4 Then .Cells(i, j) = .Cells(i, k)         If Len(.Cells(i, k)) = 7 Then             Select Case Left(.Cells(i, k), 2)                 Case "01"                     .Cells(i, j) = "JAN " & Right(.Cells(i, k), 4)                 Case "02"                     .Cells(i, j) = "FEB " & Right(.Cells(i, k), 4)                 Case "03"                     .Cells(i, j) = "MRZ " & Right(.Cells(i, k), 4)                 Case "04"                     .Cells(i, j) = "APR " & Right(.Cells(i, k), 4)                 Case "05"                     .Cells(i, j) = "MAI " & Right(.Cells(i, k), 4)                 Case "06"                     .Cells(i, j) = "JUN " & Right(.Cells(i, k), 4)                 Case "07"                     .Cells(i, j) = "JUL " & Right(.Cells(i, k), 4)                 Case "08"                     .Cells(i, j) = "AUG " & Right(.Cells(i, k), 4)                 Case "09"                     .Cells(i, j) = "SEPT " & Right(.Cells(i, k), 4)                 Case "10"                     .Cells(i, j) = "OKT " & Right(.Cells(i, k), 4)                 Case "11"                     .Cells(i, j) = "NOV " & Right(.Cells(i, k), 4)                 Case "12"                     .Cells(i, j) = "DEZ " & Right(.Cells(i, k), 4)             End Select         Else             Select Case Mid(.Cells(i, k), 4, 2)                 Case "01"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " JAN " & Right(.Cells(i, k), 4)                 Case "02"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " FEB " & Right(.Cells(i, k), 4)                 Case "03"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " MRZ " & Right(.Cells(i, k), 4)                 Case "04"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " APR " & Right(.Cells(i, k), 4)                 Case "05"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " MAI " & Right(.Cells(i, k), 4)                 Case "06"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " JUN " & Right(.Cells(i, k), 4)                 Case "07"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " JUL " & Right(.Cells(i, k), 4)                 Case "08"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " AUG " & Right(.Cells(i, k), 4)                 Case "09"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " SEPT " & Right(.Cells(i, k), 4)                 Case "10"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " OKT " & Right(.Cells(i, k), 4)                 Case "11"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " NOV " & Right(.Cells(i, k), 4)                 Case "12"                     .Cells(i, j) = Left(.Cells(i, k), 2) & " DEZ " & Right(.Cells(i, k), 4)             End Select         End If          ' .............Der folgende Eintrag ändert die Tage 01  bis 09 nach 1 bis 9 .........                If Left(Range("BT" & i), 1) = "0" Then Range("BT" & i) = Mid(Range("BT" & i), 2, 20)         If Left(.Cells(i, k), 4) = "vor " Then             .Cells(i, j) = "BEF " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 5) = "nach " Then             .Cells(i, j) = "AFT " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 3) = "um " Then             .Cells(i, j) = "ABT " & Right(.Cells(i, k), 4)         End If              End With End Sub
  Vor allem wird hier nur einmal LEFT(xxx, 2) bzw. MID(xxx,4, 2) ausgeführt. Das beschleunigt die Durchführung um den Faktor 12. Durch Zuweisung der Monatsnamen zu einer Variablen und Eintragen in die Zelle nach dem  Select Case könnte man das noch etwas eleganter machen:  Code: Sub Datum3()     Dim i As Long, j As Long, k As Long, Spalte1 As Range, Spalte2 As Range     Dim s As String     'Geburts Datum     i = ActiveCell.Row     With Tabelle1         Set Spalte1 = .Rows(6).Find("Geburt-Datum")         If Not Spalte1 Is Nothing Then k = Spalte1.Column         Set Spalte2 = .Rows(6).Find("Geburt.-.Datum")         If Not Spalte2 Is Nothing Then j = Spalte2.Column         If Len(.Cells(i, k)) = 4 Then .Cells(i, j) = .Cells(i, k)         If Len(.Cells(i, k)) = 7 Then             Select Case Left(.Cells(i, k), 2)                 Case "01"                     s = "JAN "                 Case "02"                     .Cells(i, j) = "FEB "                 Case "03"                     s = "MRZ "                 Case "04"                     s = "APR "                 Case "05"                     s = "MAI "                 Case "06"                     s = "JUN "                 Case "07"                     s = "JUL "                 Case "08"                     s = "AUG "                 Case "09"                     s = "SEPT "                 Case "10"                     s = "OKT "                 Case "11"                     s = "NOV "                 Case "12"                     s = "DEZ "             End Select             .Cells(i, j) = s & Right(.Cells(i, k), 4)         Else             Select Case Mid(.Cells(i, k), 4, 2)                 Case "01"                     s = " JAN "                 Case "02"                     s = " FEB "                 Case "03"                     s = " MRZ "                 Case "04"                     s = " APR "                 Case "05"                     s = " MAI "                 Case "06"                     s = " JUN "                 Case "07"                     s = " JUL "                 Case "08"                     s = " AUG "                 Case "09"                     s = " SEPT "                 Case "10"                     s = " OKT "                 Case "11"                     s = " NOV "                 Case "12"                     s = " DEZ "             End Select             .Cells(i, j) = Left(.Cells(i, k), 2) & s & Right(.Cells(i, k), 4)         End If          ' .............Der folgende Eintrag ändert die Tage 01  bis 09 nach 1 bis 9 .........                If Left(Range("BT" & i), 1) = "0" Then Range("BT" & i) = Mid(Range("BT" & i), 2, 20)         If Left(.Cells(i, k), 4) = "vor " Then             .Cells(i, j) = "BEF " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 5) = "nach " Then             .Cells(i, j) = "AFT " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 3) = "um " Then             .Cells(i, j) = "ABT " & Right(.Cells(i, k), 4)         End If              End With End Sub
 Es geht aber noch eleganter, komplett ohne  If oder  Select Case:  Code: Sub Datum4()     Dim i As Long, j As Long, k As Long, Spalte1 As Range, Spalte2 As Range     'Geburts Datum     i = ActiveCell.Row     With Tabelle1         Set Spalte1 = .Rows(6).Find("Geburt-Datum")         If Not Spalte1 Is Nothing Then k = Spalte1.Column         Set Spalte2 = .Rows(6).Find("Geburt.-.Datum")         If Not Spalte2 Is Nothing Then j = Spalte2.Column         If Len(.Cells(i, k)) = 4 Then .Cells(i, j) = .Cells(i, k)         If Len(.Cells(i, k)) = 7 Then             .Cells(i, j) = UCase(Format("01." & Left(.Cells(i, k), 2) & ".00", "MMM ")) & Right(.Cells(i, k), 4)         Else             .Cells(i, j) = Left(.Cells(i, k), 2) & UCase(Format("01." & Mid(.Cells(i, k), 4, 2) & ".00", "MMM ")) & Right(.Cells(i, k), 4)         End If          ' .............Der folgende Eintrag ändert die Tage 01  bis 09 nach 1 bis 9 .........                If Left(Range("BT" & i), 1) = "0" Then Range("BT" & i) = Mid(Range("BT" & i), 2, 20)         If Left(.Cells(i, k), 4) = "vor " Then             .Cells(i, j) = "BEF " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 5) = "nach " Then             .Cells(i, j) = "AFT " & Right(.Cells(i, k), 4)         End If         If Left(.Cells(i, k), 3) = "um " Then             .Cells(i, j) = "ABT " & Right(.Cells(i, k), 4)         End If              End With End Sub
 Wenn man jetzt noch weiß, dass das deutsche Excel die kurzen Monatsnamen in der siebten benutzerdefinierten Liste hinlegt hat (die englischen sind in Liste 3), dann kann man den länglichen Ausdruck in  UCase() noch etwas kürzen: aus  UCase(Format("01." & Left(.Cells(i, k), 2) & ".00", "MMM ")) wird dann  UCase(arr(--Left(.Cells(i, k), 2)) & " ") bzw. analog dann mit Mid() statt Left(). Und mal so ganz nebenbei bemerkt: ist es nicht etwas inkonsequent, wenn man für die Monatsnamen deutsche Abkürzungen verwendet, aber für die Zeitbereiche englische?
	  
	
	
Gruß, Helmut
  Win10 - Office365 / MacOS - Office365
 
	
	
 
 
	 
 |