Hai risolto, bene e grazie a Z0K.
C'e' da notare che la Funzione restituisce una stringa; ma se vuoi una "vera data" basta usare
- Codice: Seleziona tutto
=--ConvertiData(A1)
Infine,
a scopo puramente ludico, pubblico questa variante:
- Codice: Seleziona tutto
Function ConData(ByVal dtCell As Range, Optional ByVal iLang As Long = 0) As Variant
Dim dtVal As String, I As Long, J As Long, repArr, ubArr, langArr
'
'Utilizzo =ConData(DataTestoOriginale [,opzionale: codice lingua])
' Codice lingua originale: 0=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
' La traduzione sara' sempre nella lingua "Locale"
'
dtVal = dtCell.Text
'Lingua orig: US, Fran, Germ, Span, Ita
langArr = Array("409", "40C", "407", "C0A", "410")
repArr = Array("dddd", "ddd", "mmmm", "mmm")
ubArr = Array(7, 7, 12, 12)
For I = 0 To 3
For J = 1 To ubArr(I)
If I < 2 Then
' Debug.Print Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I))
dtVal = Replace(dtVal, Application.Text(DateSerial(2017, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I)) & " ", "", , , vbTextCompare)
Else
' Debug.Print Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I))
dtVal = Replace(dtVal, Application.Text(DateSerial(2017, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I)), Format(DateSerial(2017, J, 1), repArr(I)), , , vbTextCompare)
End If
Next J
Next I
If IsDate(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare))) Then
ConData = DateValue(Trim(Replace(Replace(dtVal, "notte", "", , , vbTextCompare), "sera", "", , , vbTextCompare)))
Else
ConData = dtVal
End If
End Function
Utilizzo =ConData(DataTestoOriginale [,opzionale: codice lingua])
Codice lingua originale: 0 oppure Omesso=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
La traduzione sara' sempre nella lingua "Locale"
Rispetto alla ConvertiData dovrebbe essere piu' "resistente", cioe' accetta situazioni anche diverse da
Weekday gg Mese AnnoAd esempio accetta i mesi "brevi" (jan, feb,...), accetta l'assenza del Weekday (es 7 jun 2017 SERA), accetta "vere date" (in questo caso non verranno convertite, perche' le vere date sono gia' in notazione locale); e soprattutto accetta stringhe in lingua 1-Francese (lundi 6 mars 2017 NOTTE), 2-Tedesca (Montag 20 marz 2017 SERA), 3-Spagnolo (lunes 6 marzo 2017 NOTTE), oltre che 4-Italiano.
Se il campo "lingua originale" e' 0 oppure omesso si usa la lingua Inglese.
Adattandola al tuo caso, per riga 1:
- Codice: Seleziona tutto
=ConData(A1)
Fosse in tedesco:
- Codice: Seleziona tutto
=ConData(A1;2)
La formula restituisce una data, formattala come piu' ti piace.
Ciao