Il formato data

Ultima modifica: 28-05-2016

Chi è dedito alla programmazione prima o poi si imbatte nella formattazione dei dati. Tra i vari tipi di dati, con cui abbiamo spesso a che fare, quelli più duri da trattare sono senz'altro le DATE.

Perciò ho fatto questa sperimentazione.

 

Preliminari:

nella prima cella del foglio Excell ho inserito una data

ho formattato le celle dalla A3 alla A8 come TESTO

ho lasciato il formato delle celle dalla B3 alla B8 come GENERALE

in alternativa al punto secondo in VBA mi premunisco di inserire il comando Range("A3").NumberFormat = "@" prima del Range("A3").Value = A e successivi che serve a formattare la cella nominata come Testo.

Il codice:

in VBA ho scritto questo codice impostando a String le variabili A e B

 

Sub FormattaData()
Dim MiaData
Dim A As String, B As String
Sheets("Foglio1").Select
MiaData = Range("A1").Value
A = Format(MiaData, "dd/mm/yy") ' formato 08/02/02
B = Format(MiaData, "dd-mm-yy") ' formato 08-02-02
Range("A3").NumberFormat = "@"
Range("A3").Value = A
Range("B3").Value = A
Range("A4").NumberFormat = "@"
Range("A4").Value = B
Range("B4").Value = B
MsgBox A & vbCr & B
A = Format(MiaData, "dd/mm/yyyy") ' formato 08/02/2002
B = Format(MiaData, "dd-mm-yyyy") ' formato 08-02-2002
Range("A5").NumberFormat = "@"
Range("A5").Value = A
Range("B5").Value = A
Range("A6").NumberFormat = "@"
Range("A6").Value = B
Range("B6").Value = B
MsgBox A & vbCr & B
A = Replace(Format(MiaData, "dd/mm/yyyy"), "/", "-") ' sostituisco "/" con "-" trattino
B = Replace(Format(MiaData, "dd/mm/yyyy"), "/", ".") ' sostituisco "/" con "." punto
Range("A7").NumberFormat = "@"
Range("A7").Value = A
Range("B7").Value = A
Range("A8").NumberFormat = "@"
Range("A8").Value = B
Range("B8").Value = B
MsgBox A & vbCr & B
End Sub

 

I risultati

nel foglio di Excel:

12/08/2003 data da manipolare
12/08/2003 data da manipolare
TESTO  GENERALE  Trasf.ne   
12/08/2003 08/12/2003 data  A = Format(MiaData, "dd/mm/yy")
12/08/2003 08/12/2003 data  B = Format(MiaData, "dd-mm-yy")
12/08/2003 08/12/2003 data  A = Format(MiaData, "dd/mm/yyyy")
12/08/2003 08/12/2003 data  B = Format(MiaData, "dd-mm-yyyy")
12/08/2003 08/12/2003 data  A = Replace(Format(MiaData, "dd/mm/yyyy"), "/", "-")
0,528738426 0,528738426 generale  B = Replace(Format(MiaData, "dd/mm/yyyy"), "/", ".")

 

Nelle MsgBox avremo questi messaggi

 RISULTATI IN MsgBox  
12/08/2003    A = Format(MiaData, "dd/mm/yy")
12/08/2003    B = Format(MiaData, "dd-mm-yy")
12/08/2003    A = Format(MiaData, "dd/mm/yyyy")
12/08/2003    B = Format(MiaData, "dd-mm-yyyy")
12/08/2003    A = Replace(Format(MiaData, "dd/mm/yyyy"), "/", "-")
0,528738426    B = Replace(Format(MiaData, "dd/mm/yyyy"), "/", ".")

 

Il discorso del trattamento delle date in ambito VBA può essere subito liquidato dicendo che in ogni caso ci restituisce in A ed in B precedentemente dichiarati come stringa (Dim A As String, B As String) il valore aspettato (seconda tabella) che andiamo ad osservare in MsgBox.

Lo stesso discorso in ambito Excel è leggermente diverso e lo possiamo dedurre osservando la prima tabella.

Da questa tabella possiamo dedurre che:

se ci premuniamo di formattare le celle che ospiteranno i nostri elaborati VBA come testo (Formato celle / Numero / Testo) oppure da VBA facciamo precedere al comando Range("A3").Value = A da questo ulteriore Range("A3").NumberFormat = "@" i risultati saranno quelli aspettati

se lasciamo, o impostiamo, il formato delle celle a Generale (Formato celle / Numero / Generale) troviamo che Excel (il riquadro arancione) arbitrariamente cambia la formattazione di queste celle in Data eccetto l'ultima ed in queste celle, sempre arbitrariamente, inverte la posizione dei giorni e dei mesi.

Buon lavoro