mercoledì 19 gennaio 2011

VBA - Trova e sostituisci

"Una semplice routine in VBA per trovare del testo all'interno di una cella e sostituirlo con altro"

Oggi mi son trovato a dover cancellare da un foglio excel con 25.000 record una speficica parola. In una colonna, infatti, oltre ad una data che mi è utile per un'analisi successiva , c'è la parola ASD.

Ad esempio:
11-04-1979 ASD
11-05-1979 ASD
11-06-1979 ASD

...



L'alternativa ad utilizzare VBA è il classico Trova e Sostituisci, dove nel campo Trova mettete "ASD" e in sostituisci lasciate vuoto.

Siccome devo automatizzare altre cose deciso di compilare una routine anche per questa piccola banalità.Eccola:


Sub togliasd()
Sheets(1).Activate
Cells.Replace What:="ASD", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub


Vediamola nel dettaglio passo passo:

  • Sub togliasd() -> inizializzo la routine e la chiamo "togliasd".
  • Sheets(1).Activate -> attiva il foglio di calcolo che mi interessa, il primo in ordine di apparizione, in alternativa potete mettere il nome che avete dato allo sheet al poste del numero 1.
  • Cell.Replace -> richiama la funzione di sostituzione
  • What:= -> Il parametro che indica cosa volete sostituire. Il cosa deve essere indicato dopo l'uguale e tra virgolette "ASD".
  • Replacement:= -> Il parametro che indica con che cosa volete sostituire. Il con che cosa, sempre dopo l'uguale e sempre tra virgolette, in questo caso è nulla, quindi tra le "" non scrivo nulla.
  • SearchOrder :=xlByRows -> Search order indica come deve procedere la ricerca, se riga per riga o (xlByRows) colonna per colonna (xlByColumns). In questo caso riga per riga. NB (il trattino basso _ serve per andare a capo)
  • MatchCase:=False -> indica se la ricerca deve essere "case sensitive" o meno. Ossia se ritenga che maiuscole e minuscole siano la stessa cosa o meno.
  • SearchFormat:=False -> è un ulteriore attributo di ricerca. In particolare si può selezionare il formato della cella...
  • ReplaceFormat:=False ->... e sostituirlo con quello messo qui.
  • End Sub -> conlude la routine.
Ciao :v


NB:
Per i perfezionisti attenti ai cicli di clock...e per chi vuole sostituire una specifica parola solo in una colonna o in una selezione specifica, aggiungete dopo Sheets(1).Activate:

Range("A1:R99").Select -> selezionare il rettangolone di celle da A1 a R99

oppure, nel caso in cui vogliate selezionare una o più colonne...

Columns("x:y").Select -> con x e y sostituite il range di colonne che volete selezionare es: B:Z" e per una colonna sola B:B

ari ciao :v

1 commento:

  1. Ciao, mi chiamo Marco e avrei una domanda: E nel caso in cui volessi sostituire in una intera cartella di lavoro? ho notato che il codice inserito da te funziona anche nella cartella di lavoro solo se imposto prima e MANUALMENTE i criteri di ricerca. Altrimenti mi va a cercare e sostituire solo nel foglio. non esiste una stringa che riporti anche la destinazione cosi che non bisogna farlo manualmente?

    RispondiElimina