Excel Forum Per condividere esperienze su Microsoft Excel

Macro Trim Finale

  • Messaggi
  • OFFLINE
    gattodimarmo1980
    Post: 293
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 07/07/2020 18:09
    Buona sera uso questa macro sotto da anni ma ora non va più perché
    non mi va mai bene niente nel 2020.Ho inserito nel foglio1 il mio file iniziale e nel foglio2 i risultati di come dovrebbe essere il riscontro.In pratica devo annulare spazi iniziali e finali di tutto il foglio. Grazie Matteo







    Sub Macro2()
    Dim x As Long
    x = Range("C63556").End(xlUp).Row
    For i = 1 To x
    Cells(i, 2) = Application.Clean(Application.Trim(Cells(i, 2)))
    Next

    On Error Resume Next
    Columns(2).Replace What:=Chr(160), Replacement:="", LookAt:=xlPart

    Cells.Select
    End Sub
  • OFFLINE
    rollis13
    Post: 952
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 07/07/2020 19:01
    Nella macro che hai allegato ti manca completamente il ciclo nel verso orizzontale. Così com'è ti ripulisce riga per riga solo la colonna B (vedi: Cells(i, 2) ).

    Per quanto riguarda la prima parte della macro potresti modificarla così:
    Option Explicit
    
    Sub Pulizia_Spazi_Celle()
    
        Dim x      As Long
        Dim area   As Range
        Dim cella  As Range
    
        x = Range("C" & Rows.Count).End(xlUp).Row  'rileva l'ultima cella in colonna C
        Set area = Range("A1:G" & x)   'definisci l'area da controllare
        For Each cella In area    'cicla tutte le celle
            If cella <> "" Then   'escluse quelle vuote
                Range(cella.Address) = Application.Clean(Application.Trim(cella))
            End If
        Next cella
    
    End Sub
    mentre per la seconda parte puoi aggiungere:
    area.Replace Chr(160), "", xlPart   'cerca nell'area il chr(160) e sostituiscilo
    area.Replace Chr(32), "", xlPart
    mettendoci pure il CHR(32) che capita spesso di trovare.
    [Modificato da rollis13 07/07/2020 20:01]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    gattodimarmo1980
    Post: 293
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 07/07/2020 20:18
    Ciao e buona serata Rollis13, non mi sono accorto che la mia macro mi ripuliva riga per riga solo la colonna B,mi è sfuggito,allego ancora il foglio ho messo la tua macro ho cambiato il nome di questa e il Range ho aggiunto la colonna H,poteva già bastare qui hai risolto ti ringrazio ma mi puoi spiegare con un esempio quando scrivi per la seconda parte puoi aggiungere:
    area.Replace Chr(160), "", xlPart 'cerca nell'area il chr(160) e sostituiscilo
    area.Replace Chr(32), "", xlPart
    non riesco a capire questo passaggio. Grazie e buona serata Matteo
  • OFFLINE
    rollis13
    Post: 953
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 07/07/2020 22:03
    Subito sotto la riga:
      Next cella
    inserisci almeno la riga che riguarda il CHR(160). In pratica questa riga sostituisce quella che hai utilizzato nella macro esempio (post #1) che però agiva solo sulla colonna B (vedi: Columns(2) ).
    Quella che riguarda il CHR(32) è un extra, potrebbe non servirti, tutto dipende da cosa si trova nel testo da ripulire.
    [Modificato da rollis13 07/07/2020 22:15]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    gattodimarmo1980
    Post: 294
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 08/07/2020 08:50
    Buon giorno Rollis ho avuto ancora problemi solo di spazi finali. Grazie a te ho capito però l'errore della mia macro
    ho risolto così .
    Sub TrimFinale()
    Dim x As Long
    x = Range("C63556").End(xlUp).Row
    For i = 1 To x
    Cells(i, 2) = Application.Clean(Application.Trim(Cells(i, 2)))
    Next

    On Error Resume Next
    Columns(2).Replace What:=Chr(160), Replacement:="", LookAt:=xlPart
    Columns(3).Replace What:=Chr(160), Replacement:="", LookAt:=xlPart
    Columns(4).Replace What:=Chr(160), Replacement:="", LookAt:=xlPart
    Columns(5).Replace What:=Chr(160), Replacement:="", LookAt:=xlPart




    Cells.Select
    End Sub
    Solo per curiosità se vuoi aggiustare la tua macro non devi però cancellarmi gli spazi in mezzo.
    Con la macro sotto ho ancora degli spazi finali.

    Sub Pulizia_Spazi_Celle()

    Dim x As Long
    Dim area As Range
    Dim cella As Range

    x = Range("C" & Rows.Count).End(xlUp).Row 'rileva l'ultima cella in colonna C
    Set area = Range("A1:G" & x) 'definisci l'area da controllare
    For Each cella In area 'cicla tutte le celle
    If cella <> "" Then 'escluse quelle vuote
    Range(cella.Address) = Application.Clean(Application.Trim(cella))
    End If
    Next cella
    area.Replace Chr(160), "", xlPart
    End Sub



    Con questa macro
    Sub Pulizia_Spazi_Celle()

    Dim x As Long
    Dim area As Range
    Dim cella As Range

    x = Range("C" & Rows.Count).End(xlUp).Row 'rileva l'ultima cella in colonna C
    Set area = Range("A1:G" & x) 'definisci l'area da controllare
    For Each cella In area 'cicla tutte le celle
    If cella <> "" Then 'escluse quelle vuote
    Range(cella.Address) = Application.Clean(Application.Trim(cella))
    End If
    Next cella
    area.Replace Chr(160), "", xlPart 'cerca nell'area il chr(160) e sostituiscilo
    area.Replace Chr(32), "", xlPart
    End Sub
    cioè aggiungendo area.Replace Chr(32), "", xlPart
    ho risolto sia spazi iniziali che finali ma mi si cancellano anche gli spazi in mezzo ma questo per me non va bene.
    Comunque ho risolto e ti ringrazio lo stesso questa è solo una curiosità.

    Ciao e grazie Matteo





  • OFFLINE
    rollis13
    Post: 954
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 08/07/2020 16:26
    - La funzione .CLEAN elimina caratteri non stampabili che vanno da CHR(0) a CHR(31).
    - La funzione .TRIM ti toglie tutti gli spazi prima e dopo e riduce ad 1 quelli intermedi.
    - CHR(32) corrisponde a 'Spazio' pertanto se ti servono gli spazi intermedi la sua riga .REPLACE non la devi usare.
    - Poi con il .REPLACE vai a eliminare eventuali caratteri CHR(160), che corrisponde ad uno 'Spazio unificatore', sostituendolo con 'Nulla' dato che non viene eliminato da .TRIM.
    Questo è quanto.

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    gattodimarmo1980
    Post: 295
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 08/07/2020 17:29
    Ti ringrazio Rollis13 delle spiegazioni.Saluti Matteo