trasformare date excel



  • trasformare date excel
    di red lotus (utente non iscritto) data: 23/07/2015 19:18:26

    Buongiorno a tutti,

    ho necessita di trasformare delle date per esempio da 01.06.2015 dd/mm/yyyy a 01/06/2015 dd/mm/yyyy
    Questa macro soddisfa le mie esigenze se non che, quando poi vado ad ordinare le date dalla più vecchia alla più recente l'ordinamento non è corretto in quanto perchè non mi trasforma i valori in modo corretto

    es 01.06.2015 dovrebbe essere dd/gg/yyyy mentre quando me la trasforma diventa 01/06/2015 mm/dd/yyyy...

    come posso ovviare al problema?

     
    Sub trasforma_data()
    
    
    Dim CL As Object
    Dim A As Date
    For Each CL In Range("a1:a6")  'intervallo su cui si interviene
    If CL <> "" Then                         'si controlla che la cella contenga dati
    CL.Replace What:=".", Replacement:="/"    'sostituisce il punto con la barra
    A = CL
    iniz = Mid(A, 1, 2)    'con la variabile Variant "iniz" prendiamo le due lettere iniziali lette da sinistra
    If iniz > 12 Then      'se iniz è maggiore di 12
    CL.NumberFormat = "dd/mm/yyyy"     'si imposta il formato cella a data in italiano
    
    Else
    CL.NumberFormat = "mm/dd/yyyy"     'altrimenti lo impostiamo in inglese, ed Excel lo renderà in italiano
    CL = A
    
    If CL.NumberFormat = "mm/dd/yyyy" Then
    CL.NumberFormat = "dd/mm/yyyy"
    CL = A
    End If
    End If: End If
    
    
    Next
    '
    End Sub



  • di Vecchio Frac data: 23/07/2015 21:27:08

    Posso chiederti chi ha scritto quel codice?
     
    Option Explicit
    
    Sub trasforma_data()
    Dim cl As Range
        For Each cl In Range("a1:a6")
            If Trim(cl) <> "" Then cl = CDate(Format(Replace(cl, ".", "/"), "dd/mm/yyyy"))
        Next
    End Sub
    






  • di red lotus (utente non iscritto) data: 24/07/2015 01:38:38

    l'ho trovato su internet e lo pensavo corretto non conoscendo la funzione trim... perchè? è scritto male immagino...



  • di Vecchio Frac data: 24/07/2015 09:49:53

    per come lo farei io sì, è scritto male... ma non è solo questione di stile.
    - bisogna usare sempre Option Explicit a inizio modulo
    - bisognerebbe indentare correttamente i blocchi di codice
    - si dovrebbero dimensionare le variabili tipizzandole al tipo corretto, quando possibile (CL)
    - ci sono anche utilizzi impropri (Mid)
    - bizzarrie concettuali (forzare il NumberFormat)

    Mi ero incuriosito dal nome della routine... di solito io scrivo i nomi delle routine così (minuscolo, con underscore) anche se tendo a scriverli in inglese.





  • di Textomb data: 24/07/2015 11:53:01

    in teoria si potrebbe evitare di ricorrere ad una routine
    =DATA.VALORE(SOSTITUISCI(A1;".";"/"))



  • di Vecchio Frac data: 24/07/2015 13:27:46

    Esatto... è la traduzione letterale in formula del mio codice.





  • di red lotus (utente non iscritto) data: 24/07/2015 20:19:28

    Io non ho ancora capito aacosa serve loption explicit. Cmq ti ringrazio per l'aiuto



  • di alfrimpa data: 24/07/2015 20:44:55

    Ciao Red Lotus

    Option Explicit rende obbligatoria la dichiarazione delle variabili.

    Se c'è questa istruzione e non dichiari una variabile con Dim il codice, all'esecuzione, va in errore.

    È buona norma tenere inserire questa istruzione (nell'editor di VBA lo si puó impostare in automatico).

    Alfredo