fornato data personalizzato



  • fornato data personalizzato
    di luna65 (utente non iscritto) data: 06/10/2016 12:50:44

    Salve ho un problema da risolvere ma non ho idea se possibile risolverlo con il formato cella provo a spiegarmi, in un foglio excel dalla cella A5 alla A150 inserisco la data, quello che voglio fare se possibile scrivere la data senza spazi e senza trattino, ma appena mi sposto ottenere la data nel formato giusto
    esempio se in A5 scrivo 100916 appena mi sposto ottenere la data 10/09/2016.



  • di Mister_x (utente non iscritto) data: 06/10/2016 15:14:31

    ciao

    per questo lavoro bisogna utilizzare VBA
    argomento gia trattato e risolto in parte con questa sub() inserita nel foglio

    modificato il Range per il tuo fabbisogno

    ciao

    Ps allego un file con inserita la sub() funzionante da A5 ad A150 nel foglio1

     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A5:A150")) Is Nothing Then Exit Sub
    On Error Resume Next
    Dim S_data As String
      Target.NumberFormat = "General"
    Application.EnableEvents = False
     Select Case Len(Target.Value)
     Case 4
      S_data = "0" & Mid(Target.Value, 1, 1) & "0" & Mid(Target.Value, 2, 1) & "20" & _
                   Mid(Target.Value, 3, 2)
    Case 5
      S_data = "0" & Mid(Target.Value, 1, 3) & "20" & Mid(Target.Value, 4, 2)
    Case 6
      S_data = Mid(Target.Value, 1, 4) & "20" & Mid(Target.Value, 5, 2)
    Case 8
    S_data = Target.Value
    Case Else
      Cells(Target.Row, Target.Column) = "Dato Non valido"
    Application.EnableEvents = True
      Exit Sub
    End Select
     Target = DateSerial(Mid(S_data, 5, 4), Mid(S_data, 3, 2), Mid(S_data, 1, 2))
    Application.EnableEvents = True
    End Sub
    
    






  • di Michelangelo (utente non iscritto) data: 06/10/2016 18:10:30

    Prova anche con questo così hai tutta la colonna "A" con la data senza spazi

    ATTENZIONE!!! va messo nel foglio che devi utilizzare
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
    Selection.NumberFormat = "ddmmyyyy"
    End Sub



  • di Michelangelo (utente non iscritto) data: 06/10/2016 18:52:24

    Non avevo notato che ti serviva da "A1:A150" ma la puoi modificare anche facilmente
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("A5:A150")) Is Nothing Then Exit Sub
    Selection.NumberFormat = "ddmmyyyy"
    End Sub



  • di luna65 (utente non iscritto) data: 06/10/2016 18:54:21

    Grazie per la risposta, funziona tutto come volevo, grazie ancora



  • di luna65 (utente non iscritto) data: 06/10/2016 19:06:33

    Scusate ho risposto senza accorgermi che c'erano altre soluzioni oltre a quella di Mister_x che funziona,
    metre la soluzione di Michelangelo non funziona se vado a scrivere nella cella la data 110316 appena mi sposto mi viene visualizzato 12012202, provato a mdificare la parte del formato nel codice in questo "dd/mm/yyyy" e se scrivo la data 110316 mi viene proposto
    12/01/2202, non sò come mai



  • fornato data personalizzato
    di luna65 (utente non iscritto) data: 06/10/2016 20:38:06

    Scusate ma ho chiso la discussione prima di provare il codice sul mio file, sorge un problema con il codice segalato da Mister_x, sul mio file nella cola A5:A150 le celle sono unite 2 a 2 tipo A5:A6 unite, A7:A8 Unite e cosi fino alla fine, e il formato data non funziona, allego il codice di Mister_x, sperando che si possa far funzionare su celle Unite.

    Allego anche il codice segalato da michelangelo, questo no funziona
    se vado a scrivere nella cella la data 110316 appena mi sposto mi viene visualizzato 12012202, provato a mdificare la parte del formato nel codice in questo "dd/mm/yyyy" e se scrivo la data 110316 mi viene proposto
    12/01/2202, non sò come mai

     
    'Codice Mister_x
    
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A5:A150")) Is Nothing Then Exit Sub
    On Error Resume Next
    Dim S_data As String
      Target.NumberFormat = "General"
    Application.EnableEvents = False
     Select Case Len(Target.Value)
     Case 4
      S_data = "0" & Mid(Target.Value, 1, 1) & "0" & Mid(Target.Value, 2, 1) & "20" & _
                   Mid(Target.Value, 3, 2)
    Case 5
      S_data = "0" & Mid(Target.Value, 1, 3) & "20" & Mid(Target.Value, 4, 2)
    Case 6
      S_data = Mid(Target.Value, 1, 4) & "20" & Mid(Target.Value, 5, 2)
    Case 8
    S_data = Target.Value
    Case Else
      Cells(Target.Row, Target.Column) = "Dato Non valido"
    Application.EnableEvents = True
      Exit Sub
    End Select
     Target = DateSerial(Mid(S_data, 5, 4), Mid(S_data, 3, 2), Mid(S_data, 1, 2))
    Application.EnableEvents = True
    End Sub
    
    'Codice Michelangelo
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("A5:A150")) Is Nothing Then Exit Sub
    Selection.NumberFormat = "ddmmyyyy"
    End Sub
    



  • di Michelangelo (utente non iscritto) data: 06/10/2016 20:50:45

    Allego anche il codice segalato da michelangelo, questo no funziona
    se vado a scrivere nella cella la data 110316 appena mi sposto mi viene visualizzato 12012202, provato a mdificare la parte del formato nel codice in questo "dd/mm/yyyy" e se scrivo la data 110316 mi viene proposto
    12/01/2202, non sò come mai

    Ma scusa allora sei tu che sei in errore perchè il numero 110316 in formato DATA corrisponde al 12/01/2202

    Ti consiglio di allegare il tuo File e spiegare meglio cosa devi fare



  • di Michelangelo (utente non iscritto) data: 06/10/2016 21:03:13

    A si adesso ho capito bene cosa cercavi volevi solamente abbreviare la data , comunque quello di Mister_x a me funziona benissimo anche con le celle unite forse hai tu un problema diverso



  • di Michelangelo (utente non iscritto) data: 06/10/2016 21:47:38

    In alternativa puoi scrivere 11/3 piu invio che ti da come risultato 11/03/2016 es. 5/3 ti restiutisce 05/03/2016