Discussione:
riconoscere la data
(troppo vecchio per rispondere)
Francesco
2006-07-15 22:18:08 UTC
Permalink
Salve a tutti,
ho un foglio excel in cui una colonna contiene delle date nel formato
February 15, 2004 e vorrei che excel le riconoscesse come date, così
da poterle ordinare e fare altre operazioni logiche.
Purtroppo non ci riesco, e anche se ho cercato altri thread immaginando
che possa essere un problema comune non sono riuscito a trovare una
soluzione.
Potreste aiutarmi?
Francesco
Norman Jones
2006-07-15 22:54:16 UTC
Permalink
Ciao Francesco.

;------------------------
ho un foglio excel in cui una colonna contiene delle date nel
formato February 15, 2004 e vorrei che excel le riconoscesse
come date, così da poterle ordinare e fare altre operazioni logiche.
Purtroppo non ci riesco, e anche se ho cercato altri thread
immaginando che possa essere un problema comune non sono
riuscito a trovare una soluzione.
Potreste aiutarmi?
;------------------------

Prova:

Seleziona la tua colonna
Dati | Testo in colonne
Seleziona: Delimitati
Avanti
Cancellare le spunte eventuali
Avanti
Metti la spunta a: Data
Nel Combobox, scegli MGA (Mese Giorno anno)
Fine.


---
Regards,
Norman
Norman Jones
2006-07-15 23:00:26 UTC
Permalink
Ciao Francesco,

avrei dovuto aggiungere:

E, finalmente: Formato | Celle | Data ecc


---
Regards,
Norman
eliano
2006-07-15 23:19:01 UTC
Permalink
Post by Norman Jones
Ciao Francesco,
E, finalmente: Formato | Celle | Data ecc
Ciao Norman.
Pensi proprio che gli amici from the States siano stati tanto malvagi da
mandargli una data in formato testo ? :-))
Rileggendo il post però, effettivamente Francesco parla di tentativi
infruttuosi, quindi probabilmente l'hai centrato tu.
Eliano
Francesco
2006-07-15 23:08:13 UTC
Permalink
Ciao Norman,
Post by Norman Jones
Seleziona la tua colonna
Dati | Testo in colonne
Seleziona: Delimitati
Avanti
Cancellare le spunte eventuali
Avanti
Metti la spunta a: Data
Nel Combobox, scegli MGA (Mese Giorno anno)
Fine.
Al termine di questa procedura succede una cosa strana, ovvero alcune
righe si trasformano immediatamente nel formato 15-apr-92 e sono
riconosciute come date, mentre tutte le altre rimangono come august 1,
1998. Provando a fare un ordinamento le ordina ancora alfabeticamente,
quindi sono ancora considerate come testo.
La cosa strana è che tutte le righe per cui la procedura funziona
hanno come mese "aprile".
Grazie
Francesco
eliano
2006-07-15 23:27:01 UTC
Permalink
Post by Francesco
Ciao Norman,
Post by Norman Jones
Seleziona la tua colonna
Dati | Testo in colonne
Seleziona: Delimitati
Avanti
Cancellare le spunte eventuali
Avanti
Metti la spunta a: Data
Nel Combobox, scegli MGA (Mese Giorno anno)
Fine.
Al termine di questa procedura succede una cosa strana, ovvero alcune
righe si trasformano immediatamente nel formato 15-apr-92 e sono
riconosciute come date, mentre tutte le altre rimangono come august 1,
1998. Provando a fare un ordinamento le ordina ancora alfabeticamente,
quindi sono ancora considerate come testo.
La cosa strana è che tutte le righe per cui la procedura funziona
hanno come mese "aprile".
Grazie
Francesco
Deve essere un pesce di Aprile.:-))
Scusa France, ma se ti posisioni su una cella originale e verifichi la
formattazione, cosa vedi? Testo o formato data ?
Eliano
Norman Jones
2006-07-16 00:03:06 UTC
Permalink
Ciao Francesco, Ciao Eliano.
Post by eliano
Scusa France, ma se ti posisioni su una cella originale e verifichi la
formattazione, cosa vedi? Testo o formato data ?
Se la formarrazione fosse testo, prova questa funzione utente:

'=============>>
Public Function ConvertDate(sDate) As Date
Dim arr As Variant
Dim arrMonths As Variant
Dim s1, s2, s3
' Dim i As Long

arrMonths = Array("January", "February", "March", "April", _
"May", "June", "July", "August", "September", _
"October", "November", "December")

arr = Split(Replace(sDate, ",", ""), " ")
s1 = arr(0): s2 = arr(1): s3 = arr(2)
s1 = Application.Match(s1, arrMonths, 0)

ConvertDate = Format(DateSerial(s3, s1, s2), "dd/mm/yy")

End Function
'<<=============

A1: February 15, 2004
B1: =ConvertDate(A1) ===> 15/02/04


---
Regards,
Norman
Norman Jones
2006-07-16 00:11:09 UTC
Permalink
rr ==> tt

E' tardi!

---
Regards,
Norman
Francesco
2006-07-16 00:16:40 UTC
Permalink
Ciao Norman, ciao Eliano.
Post by Norman Jones
Post by eliano
Scusa France, ma se ti posisioni su una cella originale e verifichi la
formattazione, cosa vedi? Testo o formato data ?
Vedo il formato testo, era questo il problema... comunque incredibile
il pesce d'aprile vero? ;))
Post by Norman Jones
...
End Function
Ho provato e funziona alla grande!!!
Grazie ancora!
eliano
2006-07-16 00:32:02 UTC
Permalink
Post by Francesco
Ciao Norman, ciao Eliano.
Post by Norman Jones
Post by eliano
Scusa France, ma se ti posisioni su una cella originale e verifichi la
formattazione, cosa vedi? Testo o formato data ?
Vedo il formato testo, era questo il problema... comunque incredibile
il pesce d'aprile vero? ;))
Post by Norman Jones
...
End Function
Ho provato e funziona alla grande!!!
Grazie ancora!
Vero, bella anche se non ho mai amato le Function.
France, se lo devi ritornare almittente, formattagli le date con
impostazione Kirghiso, Mongolo o del Barein, così impara.:-))
Buona notte a tutti.
Eliano
Norman Jones
2006-07-16 00:44:36 UTC
Permalink
Ciao Eliano,

'------------------------------------
se lo devi ritornare almittente, formattagli le date con
impostazione Kirghiso, Mongolo o del Barein, così impara.:-))

'------------------------------------

ROTFL.

---
Regards,
Norman
Francesco
2006-07-16 08:46:48 UTC
Permalink
Buongiorno :-))
Post by eliano
Vero, bella anche se non ho mai amato le Function.
France, se lo devi ritornare almittente, formattagli le date con
impostazione Kirghiso, Mongolo o del Barein, così impara.:-))
Buona notte a tutti.
Eliano
LOL!!!
Buona giornata.
Francesco
errebi
2006-07-16 07:35:26 UTC
Permalink
Post by Norman Jones
'=============>>
Public Function ConvertDate(sDate) As Date
Dim arr As Variant
Dim arrMonths As Variant
Dim s1, s2, s3
' Dim i As Long
arrMonths = Array("January", "February", "March", "April", _
"May", "June", "July", "August", "September", _
"October", "November", "December")
arr = Split(Replace(sDate, ",", ""), " ")
s1 = arr(0): s2 = arr(1): s3 = arr(2)
s1 = Application.Match(s1, arrMonths, 0)
ConvertDate = Format(DateSerial(s3, s1, s2), "dd/mm/yy")
End Function
'<<=============
Come sempre sei GENIALE!
Io ho avuto con un file CSV, un problema analogo in cui, però, il
formato data-testo era del tipo:
"Jul 15 12:10" cioè "mmm gg [h]:mm"
che io avevo risolto con la formula:
=SE=SE(A1="";"";DATA(2006;mese;SINISTRA(DESTRA(A1;8);2))+VALORE(DESTRA(A1;5)))
che restituisce il valore: Sab/15/07/2006 - h. 12:10:00.

Volendo usare la tua funzione, questa come andrebbe impostata?
Grazie Norman
Norman Jones
2006-07-16 11:38:17 UTC
Permalink
Ciao Errebi,
'---------------------------
Io ho avuto con un file CSV, un problema analogo in cui, però,
il formato data-testo era del tipo:
"Jul 15 12:10" cioè "mmm gg [h]:mm"
che io avevo risolto con la formula:
=SE=SE(A1="";"";DATA(2006;mese;SINISTRA(DESTRA(A1;8);2))+VALORE(DESTRA(A1;5)))
che restituisce il valore: Sab/15/07/2006 - h. 12:10:00.

Volendo usare la tua funzione, questa come andrebbe impostata?
'---------------------------

Era all'una della mattina quando scrivevo quella funzione ed ero alquanto
stanco! Chiedo Scusa!

Allora, riavviarò il cervello ...

La tua versione italiana di Excel non può riconoscere una data inglese.
Però, il VBA ha una buona conoscenza delle date inglese! Il VBA può anche
convertire un valore di tipo testo in valore di tipo data. Pertanto, la
seguente funzione funzionerebbe sia per i tuoi dati, che per i dati di
Francesco; più genericamente, funzionerebbe con qualsiasi valore che VBA
possa riconoscere come data.

Prova:

'=============>>
Public Function ItalianDate(sEnglishDate) As Date
ItalianDate = CDate(sEnglishDate)
End Function
'<<=============


---
Regards,
Norman
Norman Jones
2006-07-16 12:22:59 UTC
Permalink
Ciao Errebi,

Per convertire i dati in posto, forse potrebbe utile anche qualcosa del tipo

'=============>>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim rCell As Range
Dim iLastRow As Long
Const col As String = "A" '<<== da CAMBIARE

Set WB = Workbooks("Cartella1.xls") '<<== da CAMBIARE
Set SH = WB.Sheets("Foglio1") '<<== da CAMBIARE

iLastRow = SH.Cells(Rows.Count, col).End(xlUp).Row

Set Rng = Range(Cells(2, col), Cells(iLastRow, col))

For Each rCell In Rng.Cells
With rCell
If IsDate(.Value) Then
.NumberFormat = "General"
.Value = CDate(.Value)
End If
End With
Next rCell
End Sub
'<<=============

---
Regards,
Norman
errebi
2006-07-17 06:40:50 UTC
Permalink
Post by Norman Jones
Ciao Errebi,
Per convertire i dati in posto, forse potrebbe utile anche qualcosa del tipo
'=============>>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim rCell As Range
Dim iLastRow As Long
Const col As String = "A" '<<== da CAMBIARE
Set WB = Workbooks("Cartella1.xls") '<<== da CAMBIARE
Set SH = WB.Sheets("Foglio1") '<<== da CAMBIARE
iLastRow = SH.Cells(Rows.Count, col).End(xlUp).Row
Set Rng = Range(Cells(2, col), Cells(iLastRow, col))
For Each rCell In Rng.Cells
With rCell
If IsDate(.Value) Then
.NumberFormat = "General"
.Value = CDate(.Value)
End If
End With
Next rCell
End Sub
'<<=============
ciao Norman,
ho provato le fx che mi hai costruito, la prima non funziona e mi dà
VALORE non riconoscendo il formato della mia cella in CSV espresso
"mmm gg [h]:mm". La seconada si interrompe con msgbox "Indice non
incluso nell'intervallo".
Le date sono in Col A Foglio1! Cartel1.xls.
Ho sempre problemi cervellotici! scusa e grazie.
Norman Jones
2006-07-17 08:04:22 UTC
Permalink
Ciao Errebi,

'---------------------------
ho provato le fx che mi hai costruito, la prima non funziona e mi dà
VALORE non riconoscendo il formato della mia cella in CSV espresso
"mmm gg [h]:mm". La seconada si interrompe con msgbox "Indice non
incluso nell'intervallo".
Le date sono in Col A Foglio1! Cartel1.xls.
Ho sempre problemi cervellotici! scusa e grazie.

'---------------------------

Potresti mandarmi il tuo file.

***@NOSPAMbtconnectDOTcom

(Si cancella "NOSPAM" e si sostituisce "DOT" con un punto)


---
Regards,
Norman
Norman Jones
2006-07-18 10:52:37 UTC
Permalink
Ciao Errebi,

Dopo un interscambio di e-mail con Errebi, credo che sia evidente che io
dovessi evitare di pontificare circa le date italiane - a meno che non
comprassi una versione di Excel Italiana!

Comunque, in risposta alla domanda specifica di Errebi
Post by errebi
Volendo usare la tua funzione, questa come andrebbe impostata?
ho suggerito:

'=============>>
Public Function ConvertDate(sDate) As Date
Dim arr As Variant
Dim arrMonths As Variant
Dim myDate As Date
Dim myTime As Date
Dim s1, s2, s3, s4

arrMonths = Array("Jan", "Feb", "Mar", "Apr", _
"May", "Jun", "Jul", "Aug", _
"Sep", "Oct", "Nov", "Dec")

arr = Split(sDate, " ")
s1 = arr(0): s2 = arr(1): s3 = arr(2): s4 = Year(Date)
s1 = Application.Match(s1, arrMonths, 0)

ConvertDate = DateSerial(s4, s1, s2) + TimeValue(s3)

End Function
'<<=============

Per convertire, in posto, un'intervallo di date inglesi, sotto forma di
stringhe di testo, in date italiane, ho suggerito qualcosa del genere:

'=============>>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim rng As Range
Dim rCell As Range
Dim Calcmode As Long

Set WB = ThisWorkbook
Set SH = WB.Sheets("Foglio1")
Set rng = Range("A2:A" & _
Cells(Rows.Count, "A").End(xlUp).Row)

On Error GoTo XIT
With Application
Calcmode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With

rng.NumberFormat = "General"

For Each rCell In rng.Cells
With rCell
.Value = ConvertDate(.Value)
.Value = Format(.Value, "dddd dd/mm/yy h:mm")
End With
Next rCell

rng.EntireColumn.AutoFit

XIT:
With Application
.Calculation = Calcmode
.ScreenUpdating = True
End With

End Sub
'<<=============


---
Regards,
Norman

eliano
2006-07-15 22:58:02 UTC
Permalink
Post by Francesco
Salve a tutti,
ho un foglio excel in cui una colonna contiene delle date nel formato
February 15, 2004 e vorrei che excel le riconoscesse come date, così
da poterle ordinare e fare altre operazioni logiche.
Purtroppo non ci riesco, e anche se ho cercato altri thread immaginando
che possa essere un problema comune non sono riuscito a trovare una
soluzione.
Potreste aiutarmi?
Francesco
Ciao Francesco.
Credo che anche nel formato americano le date possano essere usate nella
maniera tradizionale, dal momento che dovrebbe trattarsi solo della
formattazione; infatti nella barra della formula la data dovrebbe apparirti
normalmente.
Se così fosse, cambiagli la formattazione nel formato Italiano con barre di
separazione.
Eliano
Loading...