Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Convertire in date, le date memorizzate come testo.

2,005 views
Skip to first unread message

Mak

unread,
Jul 12, 2017, 10:44:04 AM7/12/17
to
Buongiorno a tutti.
Ho l'esigenza di trasformare il contenuto di una colonna, ove sono riportate una serie di numeri (in realtà sono date) scritte senza separatori (19490220 - 19541231 - 19611026) in date di nascita (20/02/1949 - 31/12/1954 - 26/10/1961).
Qualcuno di buon cuore sa quale formula applicare o i passaggi da effettuare per arrivare a tale risultato?

Grazie.

casanmaner

unread,
Jul 12, 2017, 11:12:15 AM7/12/17
to
Ipotizzando che in A1 ci sia la prima data prova:
=DATA(SINISTRA(A1;4);STRINGA.ESTRAI(A1;5;2);DESTRA(A1;2))

Mak

unread,
Jul 12, 2017, 11:14:46 AM7/12/17
to
Sei un Signore!!!

Ti ringrazio.

Ammammata

unread,
Jul 13, 2017, 4:00:22 AM7/13/17
to
Il giorno Wed 12 Jul 2017 05:12:14p, *casanmaner* ha inviato su
microsoft.public.it.office.excel il messaggio
news:449f5901-67d7-4426...@googlegroups.com. Vediamo cosa
ha scritto:

>>   sono date) scritte senza
> separatori (19490220 - 19541231 - 19611026) in date di nascita
> (20/02/1949 - 31/12/1954 - 26/10/1961).
>
> Ipotizzando che in A1 ci sia la prima data prova:
> =DATA(SINISTRA(A1;4);STRINGA.ESTRAI(A1;5;2);DESTRA(A1;2))
>
>

il testo/data a otto cifre è standard ISO 8601
possibile che excel non lo gestisca?


nota: la formula sopra la ho usata proprio ieri ;) ma ho preferito inserire
tre volte stringa.estrai (in inglese MID)

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
>>>>> http://www.bb2002.it :) <<<<<
........... [ al lavoro ] ...........

casanmaner

unread,
Jul 13, 2017, 5:18:05 AM7/13/17
to
Il giorno giovedì 13 luglio 2017 10:00:22 UTC+2, Ammammata ha scritto:
> Il giorno Wed 12 Jul 2017 05:12:14p, *casanmaner* ha inviato su
> microsoft.public.it.office.excel il messaggio
> news:449f5901-67d7-4426...@googlegroups.com. Vediamo cosa
> ha scritto:
>
> >>   sono date) scritte senza
> > separatori (19490220 - 19541231 - 19611026) in date di nascita
> > (20/02/1949 - 31/12/1954 - 26/10/1961).
> >
> > Ipotizzando che in A1 ci sia la prima data prova:
> > =DATA(SINISTRA(A1;4);STRINGA.ESTRAI(A1;5;2);DESTRA(A1;2))
> >
> >
>
> il testo/data a otto cifre è standard ISO 8601
> possibile che excel non lo gestisca?
>


Metti caso che io in una cella inserisca il valore 19490220.
Come farebbe Excel a capire che si tratta proprio di una data e non un valore?

In excel le date sono dei numeri che poi assumo il formato data in automatico.
Excel converte in numero un "qualcosa" che viene inserito se suddivio da barre(es. g/m/aa o gg/mm/aaaa, ecc.) e questo qualcosa viene riconosciuto come una data valida, dandogli altresì il formato data predefinito.

Ammammata

unread,
Jul 13, 2017, 8:13:22 AM7/13/17
to
Il giorno Thu 13 Jul 2017 11:18:03a, *casanmaner* ha inviato su
microsoft.public.it.office.excel il messaggio
news:90e075a7-4f1c-438e...@googlegroups.com. Vediamo cosa
ha scritto:

> Metti caso che io in una cella inserisca il valore 19490220.
> Come farebbe Excel a capire che si tratta proprio di una data e non un
> valore?
>
>

sorry, I didn't make myself clear...
intendevo una FUNZIONE per gestire il formato ISO (conversione da...a...),
senza dover ricorrere all'utilizzo di 4 (date, mid, mid, mid o date, left,
mid, right)

casanmaner

unread,
Jul 13, 2017, 2:04:31 PM7/13/17
to
Il giorno giovedì 13 luglio 2017 14:13:22 UTC+2, Ammammata ha scritto:
> Il giorno Thu 13 Jul 2017 11:18:03a, *casanmaner* ha inviato su
> microsoft.public.it.office.excel il messaggio
> news:90e075a7-4f1c-438e...@googlegroups.com. Vediamo cosa
> ha scritto:
>
> > Metti caso che io in una cella inserisca il valore 19490220.
> > Come farebbe Excel a capire che si tratta proprio di una data e non un
> > valore?
> >
> >
>
> sorry, I didn't make myself clear...
> intendevo una FUNZIONE per gestire il formato ISO (conversione da...a...),
> senza dover ricorrere all'utilizzo di 4 (date, mid, mid, mid o date, left,
> mid, right)
>
Ah in questo senso.
Mah ... comunque volendo "semplificarsi" l'inserimento si potrebbe sempre creare una FDU in modo che almeno l'inserimento risulti più immediato e semplice.

Baduz

unread,
Jul 13, 2017, 2:11:36 PM7/13/17
to


<"Mak" ha scritto nel messaggio
news:c1a48ec9-0541-4daf...@googlegroups.com...
non serve alcuna formula: seleziona la colonna, DATI\FORMATO COLONNE \
LARGHEZZA FISSA\ FORMATO DATA AMG

Baduz

unread,
Jul 13, 2017, 2:12:07 PM7/13/17
to

<<intendevo una FUNZIONE per gestire il formato ISO (conversione da...a...),

non serve alcuna funzione: seleziona la colonna, DATI\FORMATO COLONNE \

casanmaner

unread,
Jul 13, 2017, 2:27:16 PM7/13/17
to
Vero anche questo ... me lo dimentico sempre che c'è quella funzione :)

Ammammata

unread,
Jul 14, 2017, 2:50:08 AM7/14/17
to
Il giorno Thu 13 Jul 2017 08:27:14p, *casanmaner* ha inviato su
microsoft.public.it.office.excel il messaggio news:57b95bd6-1558-4c38-a595-
97fb92...@googlegroups.com. Vediamo cosa ha scritto:

>> non serve alcuna funzione: seleziona la colonna, DATI\FORMATO COLONNE \
>
>> LARGHEZZA FISSA\ FORMATO DATA AMG
>
> Vero anche questo ... me lo dimentico sempre che c'è quella funzione :)
>

ok, ma se devo usare la stringa yyyymmdd in una funzione devo comunque
ricorrere alla conversione tramite una o più funzioni: quello che mi hai
suggerito (e che non conoscevo, grazie) è utile per una conversione manuale

ho provato a registrare una macro, ecco cosa fa:

Sub conv8601()
'
' conv8601 Macro
'

'
Selection.TextToColumns Destination:=Range("J1"),
DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 5), Array(8, 1)),
TrailingMinusNumbers:=True
Selection.NumberFormat = "dd/mm/yyyy;@"
End Sub

la funzione (unica) equivalente non c'è

casanmaner

unread,
Jul 14, 2017, 4:21:51 AM7/14/17
to
Il giorno venerdì 14 luglio 2017 08:50:08 UTC+2, Ammammata ha scritto:

>
> ok, ma se devo usare la stringa yyyymmdd in una funzione devo comunque
> ricorrere alla conversione tramite una o più funzioni

Come dicevo, se ti interessa mantenere il formato ma utilizzare il dato come una "data" si può pensare ad una FDU.
Qualcosa del genere ad esempio:

Function ConvertiData8601(Data8601 As Long) As Date
Dim Anno As Long, Mese As Long, Giorno As Long
Anno = Left(Data8601, 4)
Mese = Mid(Data8601, 5, 2)
Giorno = Right(Data8601, 2)
ConvertiData8601 = CDate(Giorno & "/" & Mese & "/" & Anno)
End Function

Se l'argomento Data8601 non è un valore (o testo) di 8 caratteri e se la "conversione" non corrisponde ad una data la funzione restituisce, naturalmente, l'errore #VALORE!.

Non ho molto testato ma mi pare funzioni.

Ammammata

unread,
Jul 14, 2017, 7:53:43 AM7/14/17
to
Il giorno Fri 14 Jul 2017 10:21:49a, *casanmaner* ha inviato su
microsoft.public.it.office.excel il messaggio
news:f09b1fda-9ee8-43d0...@googlegroups.com. Vediamo cosa
ha scritto:

> Come dicevo, se ti interessa mantenere il formato ma utilizzare il
> dato come una "data" si può pensare ad una FDU

sì, il suggerimento era chiaro, lamentavo piuttosto il dover scrivere una
decina di righe di codice per ottenere un risultato che, IMHO, dovrebbe
nascede da una funzione presente nel programma

mi capita spesso di lavorare con file DBF di un vecchio gestionale,
database visual fox pro, dove le date sono tutte memorizzate ISO
(aaaammgg): una funzione di conversione, eseguita per decine di migliaia di
volte su più campi all'interno di ogni record, dovrebbe portare al
risparmio di tempo nell'esecuzione del codice

al momento risolvo convertendo una tantum le tabelle da DBF in formato MDB
e lavorando su queste ultime

Scossa

unread,
Jul 14, 2017, 11:01:48 AM7/14/17
to
Il giorno venerdì 14 luglio 2017 13:53:43 UTC+2, Ammammata ha scritto:

>... lamentavo piuttosto il dover scrivere una
> decina di righe di codice per ottenere un risultato che, IMHO, dovrebbe
> nascede da una funzione presente nel programma
>

Basta una riga di codice:

Function uData(ByVal sData As String) As Date

uData = Evaluate("=DATEVALUE(REPLACE(REPLACE(" & sData & ",5,0,""-""),8,0,""-""))")

End Function

Oppure usare la formula nella cella:
=DATA.VALORE(RIMPIAZZA(RIMPIAZZA(A1;5;0;"-");8;0;"-"))

ovviamente la cella deve essere formattata come data.

casanmaner

unread,
Jul 14, 2017, 12:22:16 PM7/14/17
to
Non sapevo che la funzione di excel rimpiazza aggiungesse il carattere, invece di sostituire un carattere, impostando 0 come numero di faratteri da sostituire :)

Lorenzo

unread,
Jul 14, 2017, 2:34:20 PM7/14/17
to
Il 14/07/2017 17:01, Scossa ha scritto:
> Il giorno venerdì 14 luglio 2017 13:53:43 UTC+2, Ammammata ha scritto:
>
>> ... lamentavo piuttosto il dover scrivere una
>> decina di righe di codice per ottenere un risultato che, IMHO, dovrebbe
>> nascede da una funzione presente nel programma
>>

> Oppure usare la formula nella cella:
> =DATA.VALORE(RIMPIAZZA(RIMPIAZZA(A1;5;0;"-");8;0;"-"))
>
> ovviamente la cella deve essere formattata come data.
>
Ciao,
ho Excel 365.
Su data valore mi da errore; inoltre devo modificare come sotto indicato
per avere la data in estensione gg-mm-aaaa:
=RIMPIAZZA(RIMPIAZZA(A1;3;0;"-");6;0;"-")
comunque: "chapeau"

ciao, Lo

ely

unread,
Feb 25, 2023, 7:21:06 AM2/25/23
to
Buongiorno ho necessità di convertire la data da formato 05/12/2023 in 5 dicembre 2023 mi serve per dei documenti da fare in formato doc , se utilizzo la funzione formato esteso di excel nel documento in formato doc mi appare come 05/12/2023 invece del testo, spero di essere stata sufficiente esauriente .
Qualcuno mi può aiutare.
Grazie
Ely
0 new messages