Datum umändern (sehr kompliziert)

Moderator: ModerationP

Re: Datum umändern (sehr kompliziert)

Beitragvon knobbi38 » 22. Okt 2021, 11:57

Hallo,

als Ergänzung hier eine erweiterte Funktion mit dem Vorschlag von snb:
Code: Alles auswählen
' in ein Modul
Public Const MS_LCID_nl_NL As Long = &H413
Public Const MS_LCID_en_US As Long = &H409

Public Function MonthStr2Number( _
    ByVal MonthName As String, _
    Optional LCID As Long = MS_LCID_en_US) As Variant
  Static col As Collection
  Static localeID As Long
 
  Dim i As Long
  Dim monthNames() As Variant
 
  If col Is Nothing Or localeID <> LCID Then
    Set col = New Collection
    localeID = LCID
   
    monthNames = Application.Evaluate( _
      "transpose(text(row(1:12)&""-0"",""[$-" & Hex(localeID) & "]mmmm""))" _
    )
   
    For i = 1 To UBound(monthNames)
      col.Add Key:=monthNames(i), Item:=i
    Next
  End If

  On Error Resume Next
  MonthStr2Number = col(MonthName)
End Function

Der Aufruf wäre dann z.B. im Direktfenster:
Code: Alles auswählen
? MonthStr2Number("maart", MS_LCID_nl_NL)
 3


Gruß Ulrich

Edit: Initialisierung von monthnames nach snb geändert.
Zuletzt geändert von knobbi38 am 22. Okt 2021, 12:14, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Datum umändern (sehr kompliziert)

Beitragvon snb » 22. Okt 2021, 11:59

@RPP

Es ist mir egal ob du 28, 29 oder 30 verwendest. Die sind alle korrekt.
Und mit 30 nur weil In windows angefangen wird mit 0 und nicht mit 1 (da hast du recht :mrgreen: ); aber das hat fur das Ergebnis keine Bedeutung whatsoever.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

Beitragvon lupo1 » 22. Okt 2021, 12:07

Nein, der falsche Tag 29.2.1900 ist der Tag Nr. 60 (korrekt wäre es der 1.3.1900)... und die Datümer beginnen am 1.1.1900 mit dem Tag 1, nicht 0.

Da alle so VBA-fixiert sind:
=--(RECHTS(A1;2)&"."&WECHSELN(WECHSELN(WECHSELN(WECHSELN(LINKS(A1;3);"ar";"rz");"y";"i");"ct";"kt");"c";"z"))
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10187
Registriert: 25. Okt 2012, 13:38

Re: Datum umändern (sehr kompliziert)

Beitragvon snb » 22. Okt 2021, 12:37

@Knobbi

Ich möchte bevorzügen:

Code: Alles auswählen
Sub M_tst()
   MsgBox F_snb("juli")
End Sub

Function F_snb(c00)
    F_snb = Filter([transpose(text(29*row(1:12),"[$-409]mmmm"))], "")(Application.Match(c00, [transpose(text(29*row(1:12),"[$-413]mmmm"))], 0) - 1)
End Function
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

Re: Datum umändern (sehr kompliziert)

Beitragvon knobbi38 » 22. Okt 2021, 12:56

@snb:
Kommt immer darauf an. Der Vorteil mit der Collection ist einfach, daß diese nur beim ersten Zugriff intialisiert wird oder wenn sich die LCID ändert. Danach erfolgt die Konvertierung einfach per Keyzugriff auf die Collection, was eigentlich sehr schnell geht.
In einer Schleife oder bei mehrfachen Aufrufen sollte sich das geschwindigkeitsmäßig schon auswirken. Zugegeben, ist vielleicht etwas mehr Schreibarbeit aber in ein Modul gepackt und bei Bedarf in das Projekt mit aufgenommen, spielt das keine Rolle.

Man könnte natürlich auch einmalig eine Übersetzungstabelle als CustomerList oder in einem Sheet abspeichern und dann darauf per Formel zugreifen.

Bei dieser Problemstellung hier im Thread, wird aber eh eine umfangreichere Stringverarbeitung erfolgen müssen und da finde ich VBA einfach vorteilhafter als beispielsweise so Formeln, wie von Lupo aufgezeigt.

Gruß Ulrich
Zuletzt geändert von knobbi38 am 22. Okt 2021, 13:03, insgesamt 3-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Datum umändern (sehr kompliziert)

Beitragvon snb » 22. Okt 2021, 12:56

@lupo1

Für Formelanhänger:

=TEXT("1-"&INT(SEARCH(MID(A1;2;2);" anebärprayunulugepktovez")/2);"[$-409]mmmm")
Zuletzt geändert von snb am 22. Okt 2021, 15:16, insgesamt 1-mal geändert.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

Re: Datum umändern (sehr kompliziert)

Beitragvon RPP63 » 22. Okt 2021, 13:14

Jetzt hat der arme TE natürlich überhaupt nichts von unserem Geplänkel (was ja durchaus interessant ist, ihm aber kaum hilft), ABER:
Er wurde ja bereits zweimal gebeten, seine Mappe hochzuladen.
Außerdem wäre es natürlich interessant, welche Webadresse er importiert hat.
Benutzeravatar
RPP63
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 11548
Registriert: 19. Okt 2012, 17:41
Wohnort: mitten im Pott

Re: Datum umändern (sehr kompliziert)

Beitragvon snb » 22. Okt 2021, 13:20

@Knobbi

Ein array ist doch nur ein Collection oder Dictionary ohne 'Key'.
Wenn du schleifen magst kann es auch so:

Code: Alles auswählen
Sub M_tst()
   MsgBox F_snb("juli")
End Sub

Function F_snb(c00)
   For j = 1 To 12
     If c00 = MonthName(j) Then Exit For
   Next
   If j < 13 Then F_snb = Evaluate("Text(" & j & "&""-0"" , ""[$-409]mmmm"")")
End Function


Vielleicht behauptet RPP nun wieder das Monthname etwas anderes liefert als hier: eine NL_monthname. :wink: :wink:
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

Re: Datum umändern (sehr kompliziert)

Beitragvon knobbi38 » 22. Okt 2021, 13:33

@snb:
Neh, so natürlich nicht. Mit "Schleife" meinte ich den wiederholten Aufruf der VBA Funktion ansich. Durch ein Array loopen, wenn alternativ per Key auf eine Collection/Dirctionary zugegriffen werden kann, finde ich jetzt nicht so toll.

@RPP:
Hast ja Recht, aber ich schätze die meisten warten einfach auf eine Beispieldatei. Ohne diese kann man nur theoretisch helfen und da der TE ein Excel noob ist, wird das alleine nicht ausreichen.

Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Beitragvon lupo1 » 23. Okt 2021, 08:13

snb hat geschrieben:=TEXT("1-"&INT(SEARCH(MID(A1;2;2);" anebärprayunulugepktovez")/2);"[$-409]mmmm")
Das ist aber nicht die gewünschte Richtung Englisch->Deutsch. Die findest Du aus dem Jahr 2017 von mir (bzw. neopa und Luc) hier:
office-hilfe.com/support/threads/rechnende-textbereiche.22441/
lupo1
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10187
Registriert: 25. Okt 2012, 13:38

Re: Datum umändern (sehr kompliziert)

Beitragvon knobbi38 » 23. Okt 2021, 11:06

Hallo,

als Ergänzung und für Freunde der API Version, so ganz ohne Abhängigkeit von Excel Funktionen und damit auch für anderen Office-Apps nutzbar:
Code: Alles auswählen
#If VBA7 Then
  Private Declare PtrSafe Function GetLocaleInfoEx Lib "kernel32" ( _
    ByVal LocaleName As LongPtr, ByVal LCType As enuLCType, _
    ByVal lpLCData As LongPtr, ByVal cchData As Long) As Long
#Else
  Private Declare Function GetLocaleInfoEx Lib "kernel32" ( _
      ByVal LocaleName As Long, ByVal LCType As enuLCType, _
      ByVal lpLCData As Long, ByVal cchData As Long) As Long
#End If

Public Enum enuLCType
  LOCALE_SMONTHNAME1 = &H38            'Bezeichnung für Januar
  LOCALE_SMONTHNAME2 = &H39            'Bezeichnung für Februar
  LOCALE_SMONTHNAME3 = &H3A            'Bezeichnung für März
  LOCALE_SMONTHNAME4 = &H3B            'Bezeichnung für April
  LOCALE_SMONTHNAME5 = &H3C            'Bezeichnung für Mai
  LOCALE_SMONTHNAME6 = &H3D            'Bezeichnung für Juni
  LOCALE_SMONTHNAME7 = &H3E            'Bezeichnung für Juli
  LOCALE_SMONTHNAME8 = &H3F            'Bezeichnung für August
  LOCALE_SMONTHNAME9 = &H40            'Bezeichnung für September
  LOCALE_SMONTHNAME10 = &H41           'Bezeichnung für Oktober
  LOCALE_SMONTHNAME11 = &H42           'Bezeichnung für November
  LOCALE_SMONTHNAME12 = &H43           'Bezeichnung für Dezember
  LOCALE_SMONTHNAME13 = &H100E         'Bezeichnung für 13ten Monat (falls es ihn gibt)
End Enum

Public Function apiGetLocaleInfoEx( _
    ByVal LCType As enuLCType, _
    ByVal LocaleName As String) As String
  Dim strLCData As String
  Dim lngResult As Long
 
  apiGetLocaleInfoEx = vbNullString
 
  strLCData = String(512, vbNullChar)
  LocaleName = LocaleName & vbNullChar

  lngResult = GetLocaleInfoEx( _
      StrPtr(LocaleName), LCType, StrPtr(strLCData), Len(strLCData) - 1)
 
  If lngResult <> 0 Then
      apiGetLocaleInfoEx = Left$(strLCData, lngResult - 1)
  End If
End Function

Public Function MonthStr2Number2( _
    ByVal MonthName As String, _
    Optional ByVal LanguageTag As String = "en-US") As Variant
   
  Static col As Collection
  Static localeTag As String
 
  Dim i As Long
 
  If col Is Nothing Or localeTag <> LanguageTag Then
    Set col = New Collection
    localeTag = LanguageTag
   
    For i = 1 To 12
      col.Add Key:=apiGetLocaleInfoEx((LOCALE_SMONTHNAME1 - 1) + i, localeTag), Item:=i
    Next
  End If
 
  On Error Resume Next
  MonthStr2Number2 = col(MonthName)
End Function


Gruß Ulrich

Edit:
Hier noch ein Link für die MS-LCIDs
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Datum umändern (sehr kompliziert)

Beitragvon MrTooDangerous » 26. Okt 2021, 13:56

gut. ich hoffe du verstehst meine tabelle
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MrTooDangerous
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 21. Okt 2021, 21:18

Re: Datum umändern (sehr kompliziert)

Beitragvon knobbi38 » 26. Okt 2021, 15:02

Hallo Jerome,

für ie Umsetzung des Monatsnamens hast du ja jetzt genügend Vorschläge als Formel oder UDF bekommen. Jetzt mußt du nur noch den String zerlegen. Dafür gibt es im Forum aber genug Beispiele. Mit ein bißchen Eigeninitiative und der Suchfunktion hier im Forum sollte das dann kein Problem mehr sein.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3605
Registriert: 02. Jul 2015, 14:23

Re: Datum umändern (sehr kompliziert)

Beitragvon MrTooDangerous » 26. Okt 2021, 20:23

ja sorry das ich mich nicht mehr gemeldet habe. hatte viel zu tun. meine tabelle habe ich mal wie erwünscht hier eingesendet. ihr werdet 3 tabellen insgesammt finden. die erste ist von mir und die könnt ihr denke ich ignorieren. die anderen beiden dahinter sind die aus wikipedia. was der eigentliche plan von all dem ist, ist dass ich eine tabelle habe die sich selbst aktualisiert mit infos von serien. ich gebe in die erste zeile der tabelle den namen der serie ein und der sucht beide tabellen durch und sacht mir dann ob der was findet. ich gucke nämlich gerne und viel, wenn ich zeit habe, und das soll mir ersparen ständig nach neuen infos zu suchen, wann dies und das weiter geht.

manchmal kommt zu den serien auch nen film. deswegen gibts da zwei verschiedene tabellen. alles was bis jetzt da ist habe ich mir innerhalb von drei tagen selbst beigebracht und an dem datum bin ich leider verzweifelt. mit VBA oder wie das heißt habe ich mich auch kurz informiert, jedoch nichts verstanden. in der tabelle fehlen auch noch viele funktionen die ich mir wünsche, habe aber noch nicht weiter gemacht.
MrTooDangerous
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 21. Okt 2021, 21:18

Re: Datum umändern (sehr kompliziert)

Beitragvon snb » 27. Okt 2021, 10:32

Ich ignoriere Arbeitsblätter mit Verbundenen Zellen.
Von wem hast du das gelernt ?
Zuletzt geändert von snb am 27. Okt 2021, 14:31, insgesamt 1-mal geändert.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8878
Registriert: 25. Sep 2014, 16:37

VorherigeNächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste