| | Post: 293 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
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
|
|
| | Post: 952 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
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) |
| | Post: 293 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
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
|
| | Post: 953 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
07/07/2020 22:03 | |
Subito sotto la riga: 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) |
| | Post: 294 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
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
|
| | Post: 954 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
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) |
| | Post: 295 | Registrato il: 03/10/2015
| Città: ALBAREDO PER SAN MARCO | Età: 44 | Utente Junior | 2003 | | OFFLINE |
|
08/07/2020 17:29 | |
Ti ringrazio Rollis13 delle spiegazioni.Saluti Matteo |
|
|