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

Estrarre data valida da timestamp

452 views
Skip to first unread message

Henry Wotton

unread,
Dec 17, 2009, 4:27:28 AM12/17/09
to
Salve a tutti.
Scusate la domanda probabilmente banale ma utilizzo poco Excel.
Ho un report con un campo che contiene il dato timestamp:
11/27/2009 5:37:25 PM

vorrei estrarre il campo data in una nuova colonna per poter totalizzaer per
data.
Vi ringrazio fin d'ora per ogni risposta utile.



Henry Wotton

unread,
Dec 17, 2009, 4:37:15 AM12/17/09
to

"Henry Wotton" <he.w...@gmail.com> ha scritto nel messaggio
news:7oubs1F...@mid.individual.net...

Mi spiego meglio, vorrei ottenere la data 27/11/2009 come risultato.
Grazie fin d'ora.


paoloard

unread,
Dec 17, 2009, 5:53:50 AM12/17/09
to

"Henry Wotton" <he.w...@gmail.com> ha scritto nel messaggio
news:7ouceiF...@mid.individual.net...

Se hai Excel in italiano e se il dato � una stringa alfanumerica:
=DATA(STRINGA.ESTRAI(A1;7;4);SINISTRA(A1;2);STRINGA.ESTRAI(A1;4;2))


--
Fai sapere se e come hai risolto grazie.
ciao paoloard
http://riolab.org

Henry Wotton

unread,
Dec 17, 2009, 6:52:39 AM12/17/09
to

"paoloard" <xxp...@alice.it> ha scritto nel messaggio
news:2C217B16-C308-45DB...@microsoft.com...

>
> Se hai Excel in italiano e se il dato � una stringa alfanumerica:
> =DATA(STRINGA.ESTRAI(A1;7;4);SINISTRA(A1;2);STRINGA.ESTRAI(A1;4;2))
>

Funziona abbastanza bene.
Ci sono date tipo 11/9/2009 che equivalgono a 09-11-2009 ma quel report non
contiene lo zero del giorno,oppure 9/30/2009.
In questi casi le posizioni di giorno, mese e anno cambiano.
Modifcando a mano la funzione dove segnala valore errato ha funzionato per�
speravo ci fosse qualcosa di pi� "standard" gi� in excel.

Ti ringrazio molto!

plinius

unread,
Dec 17, 2009, 8:25:16 AM12/17/09
to

"Henry Wotton" <he.w...@gmail.com> ha scritto nel messaggio
news:7oukc8F...@mid.individual.net...

Se non ti spaventi della bruttezza, questa funziona sempre:
=DATA(STRINGA.ESTRAI(A1;RICERCA("/";A1;RICERCA("/";A1;1)+1)+1;4);SINISTRA(A1;RICERCA("/";A1;1)-1);STRINGA.ESTRAI(A1;RICERCA("/";A1;1)+1;RICERCA("/";A1;RICERCA("/";A1;1)+1)-RICERCA("/";A1;1)-1))

Ciao,
E.


Nur

unread,
Dec 17, 2009, 12:27:31 PM12/17/09
to

"Henry Wotton" <he.w...@gmail.com> ha scritto nel messaggio
news:7oukc8F...@mid.individual.net...
Ti propongo altre due alternative:
1) altra formula (giusto una variante, quella di Plinius � del tutto
equivalente, ho solo variato il sistema di estrazione del giorno)
=DATA(STRINGA.ESTRAI(A1;TROVA("
";A1)-4;4);SINISTRA(A1;TROVA("/";A1)-1);SOSTITUISCI(STRINGA.ESTRAI(A1;TROVA("/";A1)+1;2);"/";""))

2) altro metodo
seleziona l'intervallo in cui hai le tue date, quindi vai in men� > dati >
testo in colonne
- primo step: [x] delimitati
- secondo step: [x] spazio
- terzo step:
in tabella 'Anteprima dati' controlla che la prima colonna sia evidenziata
in nero, quindi in 'Formato dati per colonna' [x] Data: e scegli MGA
Clicca sulla seconda colonna nell'anterprima(diventa nera), 'in 'Formato
dati per colonna' [x] Non importare colonna
Clicca sulla terza colonna: come sopra
Fine
E' lungo da descrivere, ma veloce da fare.

Ciao, Nur

r

unread,
Dec 17, 2009, 5:07:18 PM12/17/09
to
On 17 Dic, 18:27, "Nur" <newsX...@gmail.com> wrote:
> "Henry Wotton" <he.wot...@gmail.com> ha scritto nel messaggionews:7oukc8F...@mid.individual.net...

>
> > "paoloard" <xxp...@alice.it> ha scritto nel messaggio
> >news:2C217B16-C308-45DB...@microsoft.com...
>
> >> Se hai Excel in italiano e se il dato è una stringa alfanumerica:

> >> =DATA(STRINGA.ESTRAI(A1;7;4);SINISTRA(A1;2);STRINGA.ESTRAI(A1;4;2))
>
> > Funziona abbastanza bene.
> > Ci sono date tipo 11/9/2009 che equivalgono a 09-11-2009 ma quel report
> > non contiene lo zero del giorno,oppure 9/30/2009.
> > In questi casi le posizioni di giorno, mese e anno cambiano.
> > Modifcando a mano la funzione dove segnala valore errato ha funzionato
> > però speravo ci fosse qualcosa di più "standard" già in excel.

>
> Ti propongo altre due alternative:
> 1) altra formula (giusto una variante, quella di Plinius è del tutto

> equivalente, ho solo variato il sistema di estrazione del giorno)
> =DATA(STRINGA.ESTRAI(A1;TROVA("
> ";A1)-4;4);SINISTRA(A1;TROVA("/";A1)-1);SOSTITUISCI(STRINGA.ESTRAI(A1;TROVA­("/";A1)+1;2);"/";""))
>
> 2) altro metodo
> seleziona l'intervallo in cui hai le tue date, quindi vai in menù > dati >

> testo in colonne
> - primo step: [x] delimitati
> - secondo step: [x] spazio
> - terzo step:
> in tabella 'Anteprima dati' controlla che la prima colonna sia evidenziata
> in nero, quindi in 'Formato dati per colonna' [x] Data: e scegli MGA
> Clicca sulla seconda colonna nell'anterprima(diventa nera), 'in 'Formato
> dati per colonna' [x] Non importare colonna
> Clicca sulla terza colonna: come sopra
> Fine
> E' lungo da descrivere, ma veloce da fare.
>
> Ciao, Nur

una regexp :-) ci starebbe mica male ...
comunque ...
=VALORE(STRINGA.ESTRAI(SOSTITUISCI(A1;"/";"/"&STRINGA.ESTRAI(A1;1;TROVA
("/";A1));2);TROVA("/";A1)+1;TROVA(" ";A1)-1))
saluti
r

r

unread,
Dec 17, 2009, 5:21:57 PM12/17/09
to
> r- Nascondi testo citato
>
> - Mostra testo citato -

giusto per rimanere in allenamento :-)

Function Estrazione_data(s As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(^\d{1,2})/(\d{1,2})/(\d{4})(.+$)"
Estrazione_data = re.Replace(s, "$2/$1/$3")
End Function

saluti
r

eliano

unread,
Dec 17, 2009, 7:15:01 PM12/17/09
to

"Henry Wotton" ha scritto:

>
> "paoloard" <xxp...@alice.it> ha scritto nel messaggio
> news:2C217B16-C308-45DB...@microsoft.com...
> >

> > Se hai Excel in italiano e se il dato è una stringa alfanumerica:

> > =DATA(STRINGA.ESTRAI(A1;7;4);SINISTRA(A1;2);STRINGA.ESTRAI(A1;4;2))
> >
>
> Funziona abbastanza bene.
> Ci sono date tipo 11/9/2009 che equivalgono a 09-11-2009 ma quel report non
> contiene lo zero del giorno,oppure 9/30/2009.
> In questi casi le posizioni di giorno, mese e anno cambiano.

> Modifcando a mano la funzione dove segnala valore errato ha funzionato però
> speravo ci fosse qualcosa di più "standard" già in excel.
>
> Ti ringrazio molto!

Ciao Sir Henry.
Questa dovrebbe essere la versione in Vba della nr. 2 della gentile Nur
(ciaoo).

Public Sub prova()
Dim stringa As Variant
stringa = Split(Range("A1"), " ")
Range("B1").Value = stringa(LBound(stringa))
End Sub

Da copiare in un modulo standard, ad esempio Modulo1; il tuo Timestamp in A1
e la data estratta in B1 già formattata (credo).
Saluti
Eliano

eliano

unread,
Dec 17, 2009, 7:38:01 PM12/17/09
to

"eliano" ha scritto:

E visto che ho parafrasato la bella Nur, diamo una parafrasata anche a
Roby.:-))

Function estraidata(rng As Range) As Date
Dim stringa As Variant
stringa = Split(rng, " ")
estraidata = CDate(stringa(LBound(stringa)))
End Function

Da copiare sempre in un modulo standard e da usare come: =estraidata(A1)

Arisaluti a tutti
Eliano

r

unread,
Dec 18, 2009, 5:58:27 AM12/18/09
to
> Eliano- Nascondi testo citato

>
> - Mostra testo citato -

ciao mitico ...
fosse stato così semplice non avrei tirato di mezzo le regexp :-)
1/2/2009 5:37:25 PM
la tua converte date univocamente americane in europee ... ma quelle
non univocamente americane le lascia così ... in ogni caso verifica
che split abbia almeno un risultato in alternativa una function di
quel tipo usata in vb potrebbe generare un errore ...
bacchettato ... ti ho bacchettato
.... adesso un abbraccio da tutta la tribu
saluti
r

Nur

unread,
Dec 18, 2009, 6:33:54 AM12/18/09
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:dfac36ad-94bd-4203...@r5g2000yqb.googlegroups.com...

una regexp :-) ci starebbe mica male ...
comunque ...
=VALORE(STRINGA.ESTRAI(SOSTITUISCI(A1;"/";"/"&STRINGA.ESTRAI(A1;1;TROVA
("/";A1));2);TROVA("/";A1)+1;TROVA(" ";A1)-1))
saluti
r

******
Questa � una bella ispirazione!
Anche cos�:
=--SINISTRA(STRINGA.ESTRAI(A1;TROVA(" ";A1)-4;4)&"/"&A1;TROVA(" ";A1)-1)

Ciao :-)
Nur


Nur

unread,
Dec 18, 2009, 7:39:49 AM12/18/09
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:5b74ddc8-0e30-4bcf...@p8g2000yqb.googlegroups.com...

giusto per rimanere in allenamento :-)

Function Estrazione_data(s As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(^\d{1,2})/(\d{1,2})/(\d{4})(.+$)"
Estrazione_data = re.Replace(s, "$2/$1/$3")
End Function

***
Come direbbe Eliano (ciao!)... "Parafrasando la mia ultima formula..."
(e giusto perch� sicuramente ho ben pi� bisogno di te di allenarmi...!)

Function Estrazione_dataB(s As String) As Date


Dim re As Object
Set re = CreateObject("vbscript.regexp")

re.Pattern = "(^\d{1,2}/\d{1,2})/(\d{4}).+"
Estrazione_dataB = CDate(re.Replace(s, "$2/$1"))
End Function

(non ti piacer�... lo so gi�)
Ciao, Nur


Henry Wotton

unread,
Dec 18, 2009, 11:40:15 AM12/18/09
to

"plinius" <punto....@libero.it> ha scritto nel messaggio
news:0jqWm.110186$9f6.1...@twister1.libero.it...

>
> Se non ti spaventi della bruttezza, questa funziona sempre:
> =DATA(STRINGA.ESTRAI(A1;RICERCA("/";A1;RICERCA("/";A1;1)+1)+1;4);SINISTRA(A1;RICERCA("/";A1;1)-1);STRINGA.ESTRAI(A1;RICERCA("/";A1;1)+1;RICERCA("/";A1;RICERCA("/";A1;1)+1)-RICERCA("/";A1;1)-1))
>

In effetti questa ha funzionato subito su tutte le righe.
Grazie!


Henry Wotton

unread,
Dec 18, 2009, 11:44:35 AM12/18/09
to

"Nur" <news...@gmail.com> ha scritto nel messaggio
news:%231Fk74z...@TK2MSFTNGP05.phx.gbl...

> 2) altro metodo
> seleziona l'intervallo in cui hai le tue date, quindi vai in men� > dati >
> testo in colonne
> - primo step: [x] delimitati
> - secondo step: [x] spazio
> - terzo step:
> in tabella 'Anteprima dati' controlla che la prima colonna sia evidenziata
> in nero, quindi in 'Formato dati per colonna' [x] Data: e scegli MGA
> Clicca sulla seconda colonna nell'anterprima(diventa nera), 'in 'Formato
> dati per colonna' [x] Non importare colonna
> Clicca sulla terza colonna: come sopra
> Fine
> E' lungo da descrivere, ma veloce da fare.
>

In effetti si fa prima a farlo che a scriverlo... :-))

Grazie ancora.


eliano

unread,
Dec 18, 2009, 5:47:02 PM12/18/09
to

"r" ha scritto:

> ..... adesso un abbraccio da tutta la tribu
> saluti
> r

Ciao Roby.
0) Non avevo XL su quel trabiccolo.
1) Il motivo per parafrasare una tua Udf era evidente.:-))
2) Dal post mi sembravano proprio date 'merigane'; sciolte o a pacchetti nin
sò.:-)))
3) Grazie dell'informazione, ma split non mi ha mai dato problemi nelle mie
MicroUdf.
4) Bacchettate gradite, contraccambio con saluti, baci e abbracci.
Eliano

0 new messages