Convertire numeri i...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

[Risolto] Convertire numeri in data

7 Post
3 Utenti
0 Reactions
468 Visualizzazioni
Forum 1
(@alxg_88)
Post: 0
New Member
Avviatore di Topic
 

Buongiorno a tutti,

Mi chiamo Alessandro e sono nuovo del forum.

Sto scrivendo una macro che grossomodo vorrei facesse questo. Analizzando una colonna specifica (es. K) nella quale sono contenuti dei valori a 5 o 6 cifre che nel file di origine erano delle date, vorrei sostanzialmente trasformarli nuovamente in date anche dentro excel. Il problema è che quando importo i dati nel foglio excel da questo programma, le date mi vengono scritte in formato numerico senza "/", quindi ad esempio la data 12 Maggio 2024 mi viene scritta 120524 e così via...

La mia macro sostanzialmente dovrebbe fare questo:

1- Individuare tutte le celle della colonna che contengono numeri di 5 o 6 cifre (perché se il giorno è inferiore al 10 del mese, la data mi viene scritta senza lo zero davanti, quindi ad esempio 70524 per indicare il 7 Maggio 2024)

2- Aggiungere il "20" per avere l'anno scritto per intero

3- Aggiungere i simboli "/" dove servono per creare le date

In definitiva, prendendo i due esempi di prima (7 Maggio 2024 e 12 Maggio 2024) dovrei trovarmeli sotto forma di 7/05/2024 e 12/05/2024.

Il problema nasce solo con le date che hanno il giorno uguale o inferiore a 12: in questo caso la data che mi viene fuori inverte giorno e mese (es. se avevo inizialmente 70524, anziché uscire 07/05/2024 mi esce 05/07/2024). Mentre le date con giorno 13 del mese o superiore sono convertite perfettamente.

Dove sto sbagliando?

Allego codice:

Sub ConvertiInData()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim lastRow As Long
    Dim valore As String
    Dim valore1 As String
    Dim valorefinale As String
    
    ' Imposta il foglio di lavoro su cui lavorare
    Set ws = ThisWorkbook.Sheets("Foglio1") ' Cambia "Foglio1" con il nome effettivo del foglio
    
    ' Determina l'ultima riga della colonna K con dati
    lastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
    
    ' Imposta il range su cui lavorare (dalla cella K1 all'ultima riga con dati)
    Set rng = ws.Range("K1:K" & lastRow)
    
    ' Cicla attraverso ogni cella nel range
    For Each cell In rng
        ' Verifica se la cella non è vuota e contiene un numero
        If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then
            ' Ottiene il valore della cella
            valore = CStr(cell.Value)
            
            ' Aggiunge il numero "20" solo se il numero ha meno di 7 cifre
            If Len(valore) < 7 Then
                valore1 = Left(valore, Len(valore) - 2) & "20" & Right(valore, 2)
            End If
            
            ' Assegna il valore modificato alla cella
            cell.Value = valore1
            
            'Aggiunge il simbolo "/" in modo da creare un formato data del tipo G/MM/AAAA oppure GG/MM/AAAA
            If Len(valore1) = 7 Then
                valorefinale = Left(valore1, 1) & "/" & Mid(valore1, 2, 2) & "/" & Right(valore1, 4)
            End If
            
            If Len(valore1) = 8 Then
                valorefinale = Left(valore1, 2) & "/" & Mid(valore1, 3, 2) & "/" & Right(valore1, 4)
            End If
            
            ' Assegna il valore modificato alla cella
            cell.Value = valorefinale
        End If
    Next cell
End Sub

Grazie a tutti in anticipo

Alessandro

 

Versione di Excel
Sistema operativo
 
Postato : 10/04/2024 11:40
Etichette discussione
gianfranco55
(@gianfranco55)
Post: 1797
Moderatore
 

ciao

sei sicuro che solo il giorno venga scritto senza lo 0 davanti?

il mese è sempre scritto con doppia cifra?

 

secondo me basta

Sub ConvertiInData()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim lastRow As Long

    
   ' Imposta il foglio di lavoro su cui lavorare
    Set ws = ThisWorkbook.Sheets("Foglio1") ' Cambia "Foglio1" con il nome effettivo del foglio
    
    ' Determina l'ultima riga della colonna K con dati
    lastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
    
    ' Imposta il range su cui lavorare (dalla cella K1 all'ultima riga con dati)
    Set rng = ws.Range("K1:K" & lastRow)
    
    ' Cicla attraverso ogni cella nel range
    For Each cell In rng
        ' Verifica se la cella non è vuota e contiene un numero
        If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then
            
            
            If Len(cell) = 5 Then
               cell = Mid(cell.Value, 2, 2) & "/" & Left(cell, 1) & "/" & Right(cell, 2)
            ElseIf Len(cell) > 5 Then
            cell = Mid(cell.Value, 3, 2) & "/" & Left(cell, 2) & "/" & Right(cell, 2)
          End If
      End If
    Next cell
End Sub

nota che ho invertito i mesi con i giorni

exel non ragiona in italiano😀

 
Postato : 11/04/2024 15:41
Forum 1
(@alxg_88)
Post: 0
New Member
Avviatore di Topic
 

@gianfranco55 Si perché il giorno costituisce la prima cifra, ed excel quando si tratta di un numero non scrive mai lo zero davanti (es. se la data è 070524 excel lo trasforma subito in 70524, mentre invece se fosse per esempio 120524 non ci sarebbero problemi perché lo zero si trova in mezzo al numero)

Di solito con excel se vuoi mantenere lo zero davanti devi mettere l'apostrofo, ma poi il tutto viene formattato come testo...

 
Postato : 11/04/2024 15:56
gianfranco55
(@gianfranco55)
Post: 1797
Moderatore
 

ciao

prova la macro sopra

 

 
Postato : 11/04/2024 16:13
tanimon
(@tanimon)
Post: 0
New Member
 

ciao a tutti, 

ed un saluto particolare a Gianfranco 😉 

meglio che la colonna K abbia formato "Generale".

Posto le due macro riviste, in entrambe mancava solo una riga di codice e per quella

di Gianfranco è veramente una "pignoleria" 🤣 

quella di Gianfranco, sotto quella di Alessandro

Buona serata

Frank

Sub converti_data()
Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim lastRow As Long

    
   ' Imposta il foglio di lavoro su cui lavorare
    Set ws = ThisWorkbook.Sheets("Foglio1") ' Cambia "Foglio1" con il nome effettivo del foglio
    
    ' Determina l'ultima riga della colonna K con dati
    lastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
    
    ' Imposta il range su cui lavorare (dalla cella K1 all'ultima riga con dati)
    Set rng = ws.Range("K1:K" & lastRow)
    
    ' Cicla attraverso ogni cella nel range
    For Each cell In rng
        ' Verifica se la cella non è vuota e contiene un numero
        If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then
            
            
            If Len(cell) = 5 Then
               cell = Mid(cell.Value, 2, 2) & "/" & Left(cell, 1) & "/" & Right(cell, 2)
            ElseIf Len(cell) > 5 Then
            cell = Mid(cell.Value, 3, 2) & "/" & Left(cell, 2) & "/" & Right(cell, 2)
          End If
      End If
    Next cell
'======================================================================================
 Columns("k").AutoFit 'riga aggiunta per aggiornare la larghezza della colonna se serve
'======================================================================================
 
End Sub


Sub ConvertiInData()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim lastRow As Long
    Dim valore As String
    Dim valore1 As String
    Dim valorefinale As String
    
    ' Imposta il foglio di lavoro su cui lavorare
    Set ws = ThisWorkbook.Sheets("Foglio1") ' Cambia "Foglio1" con il nome effettivo del foglio
    
    ' Determina l'ultima riga della colonna K con dati
    lastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
    
    ' Imposta il range su cui lavorare (dalla cella K1 all'ultima riga con dati)
    Set rng = ws.Range("K1:K" & lastRow)
    
    ' Cicla attraverso ogni cella nel range
    For Each cell In rng
        ' Verifica se la cella non è vuota e contiene un numero
        If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then
            ' Ottiene il valore della cella
            valore = CStr(cell.Value)
            
            ' Aggiunge il numero "20" solo se il numero ha meno di 7 cifre
            If Len(valore) < 7 Then
                valore1 = Left(valore, Len(valore) - 2) & "20" & Right(valore, 2)
            End If
            
            ' Assegna il valore modificato alla cella
            cell.Value = valore1
            
            'Aggiunge il simbolo "/" in modo da creare un formato data del tipo G/MM/AAAA oppure GG/MM/AAAA
            If Len(valore1) = 7 Then
                valorefinale = Left(valore1, 1) & "/" & Mid(valore1, 2, 2) & "/" & Right(valore1, 4)
            End If
            
            If Len(valore1) = 8 Then
                valorefinale = Left(valore1, 2) & "/" & Mid(valore1, 3, 2) & "/" & Right(valore1, 4)
            End If
            
            ' Assegna il valore modificato alla cella
            cell.Value = valorefinale
'===================================================================================
            cell.NumberFormat = "mm/dd/yyyy" 'riga aggiunta per formattare come data
'===================================================================================
        End If
    Next cell
End Sub
Questo post è stato modificato 11 mesi fa da tanimon
 
Postato : 11/04/2024 17:48
Forum 1
(@alxg_88)
Post: 0
New Member
Avviatore di Topic
 

Vi ringrazio molto per l'aiuto!

 
Postato : 12/04/2024 10:28
gianfranco55
(@gianfranco55)
Post: 1797
Moderatore
 

ciao

se hai risolto gentilmente chiudi la discussione

grazie

 
Postato : 12/04/2024 10:40
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy
     Scarica il nostro ebook gratuito     

Unisciti a oltre 35.000 professionisti
che hanno già scelto di semplificare il proprio lavoro
e aumentare la produttività con la nostra newsletter!

Scarica l’ebook con i
migliori trucchi e suggerimenti per Excel
selezionati per te da Excel Academy

Download