Condividi:        

[Excel VBA] Ricerca e sostituisci valori multipli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel VBA] Ricerca e sostituisci valori multipli

Postdi Black.Jack » 16/08/10 10:38

Buongiorno a tutti e buona festa per i lavoratori nel commercio :)

c'è chi va in spiaggia e chi si diverte con il VBA!

Dunque, tutti conoscono il "find and replace".

Ho provato a studiarne la formula salvando l'azione eseguita nel foglio di calcolo e guardandone poi il vba.
In pratica è possibile sostituire un solo carattere\parola\numero per volta mentre io avrei bisogno di sostituire con "" (nulla) diversi caratteri, come punteggiatura varia.

Toccherebbe quindi copiare n volte la formula per togliere tutti i fastidiosi intrusi...ma io sono certo che ci sia una soluzione + elegante.

ho provato una cosa del genere:

Sub sdadas()

Dim I As Integer
Dim SFind As String
Dim SReplace As String

SFind = "b"
SReplace = ""
For I = 1 To 50 Step 1
If Cells(I, 1).Value = SFind Then
Cells(I, 1).Value = SReplace

ElseIf I = 50 Then
I = 1
SFind = "gatto"

End If
Next
End Sub


Ma il loop sebbene funzioni poi fa bloccare excel (forse perchè non trova mai fine).

forse dovrei usare select case? però non conosco bene il comando e cercando di agganciarlo ad un loop mi da errori su errori.

idee?

grazie! :)
Win7 + Office 2010 Ita
Xp + Office 2010 Ita
Black.Jack
Utente Junior
 
Post: 93
Iscritto il: 23/06/10 08:40

Sponsor
 

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi pietrol » 16/08/10 14:16

Ciao Black.Jack
io farei così
Codice: Seleziona tutto
Sub Cambia
    Range("A1:A50).Select
' sostituzione 1 - "b" con null
    Selection.Replace What:="b", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False
' sostituzione 2 - "gatto" con "cane"
    Selection.Replace What:="gatto", Replacement:="cane", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False
' sostituzione 3  ....
'ecc. ecc.
End sub

Si può fare anche in modo più sofisticato, ma così già funziona.

ciao
pietrol
il lupo ululà, il castello ululì
pietrol
Utente Senior
 
Post: 270
Iscritto il: 07/01/09 14:34

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi Black.Jack » 16/08/10 15:59

eheheh era proprio la procedura che avevo descritto in primis, in realtà era proprio la versione "elegante" che cercavo..


cmq ti ringrazio molto, per ora mi accontento di questa chissà che un domani io stesso possa aggiornare la formula qui per l'utilità di tutti.... ;)
Win7 + Office 2010 Ita
Xp + Office 2010 Ita
Black.Jack
Utente Junior
 
Post: 93
Iscritto il: 23/06/10 08:40

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi Flash30005 » 17/08/10 20:46

Non se se la ritieni "elegante" ma questa macro toglie tutti i caratteri che NON sono le 26 lettere dell'alfabeto (a-z, A-Z)
(non elimina solo due caratteri Jolly: "*" e "?")

E' possibile modificare la macro per lasciare altri caratteri possibili come le vocali accentate etc.

Codice: Seleziona tutto
Sub ElimCarSpec()
UR = Range("B" & Rows.Count).End(xlUp).Row   ' <<< conta le righe colonna B
For VS1 = 33 To 255  '<<< tutti i caratteri e simboli leggibili
If VS1 = 42 Or VS1 = 63 Then GoTo esci2  '<<< in caso di carattere "*" o "?" salta la routine altrimenti cancella tutto
If VS1 > 64 And VS1 < 91 Then GoTo esci2  '<<< in caso di lettere dell'alfabeto maiuscole salta la routine
If VS1 > 96 And VS1 < 122 Then GoTo esci2 '<<< in caso di lettere dell'alfabeto minuscole salta la routine
    Range("B1:B" & UR).Select   '<<< seleziona il range di sostituzione
    Selection.Replace What:="" & Chr(VS1) & "", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
esci2:
Next VS1
End Sub


Per i test ho utilizzato la colonna B

Nota: con lo stesso sistema potresti avere una tabella di nomi sul foglio di excel es.: in N1 "Gatto" in N2 "Cane" etc etc
e far assumere alla variabile attuale Chr(VS1) il valore Range("N" & VS1).value del ciclo For... next quanto contenuto nella cella N1, N2 etc

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi Black.Jack » 18/08/10 18:25

Cavolo ogni volta che rispondi tocca una settimana per apprendere tutto!!!


grazieeeeeeeeeeeeeeeeeeeeee ;)
Win7 + Office 2010 Ita
Xp + Office 2010 Ita
Black.Jack
Utente Junior
 
Post: 93
Iscritto il: 23/06/10 08:40

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi Black.Jack » 29/08/10 10:17

Ecco un'interpretazione personale sulla macro del Maestro:

Con questa dovrebbe essere risolto il problema dei caratteri speciali in toto.

Codice: Seleziona tutto
Sub MacroEliminaCarSpeciali()

UR = Range("A" & Rows.Count).End(xlUp).Row

For VS1 = 32 To 255

If VS1 = 42 Or VS1 = 63 Then GoTo esci1  'ATTENZIONE: commentando questa riga la macro cancellerà tutti i caratteri (già spiegato precedentemente)
If VS1 > 47 And VS1 < 58 Then GoTo esci2  'Se numeri salta la routine
If VS1 > 65 And VS1 < 91 Then GoTo esci2   'Se lett Maiusc salta la routine
If VS1 > 96 And VS1 < 123 Then GoTo esci2  'Se lett minusc salta la routine

    Range("A1:A" & UR).Select
    Selection.Replace What:="" & Chr(VS1) & "", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
       
esci1: Selection.Replace What:="~*~", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
       
        Selection.Replace What:="~?~", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
       
     

esci2:
Next VS1

End Sub
Win7 + Office 2010 Ita
Xp + Office 2010 Ita
Black.Jack
Utente Junior
 
Post: 93
Iscritto il: 23/06/10 08:40

Re: [Excel VBA] Ricerca e sostituisci valori multipli

Postdi Flash30005 » 29/08/10 15:57

Buona l'idea del simbolo ~ (tilde) però ho notato che ogni volta passi per la routine di esci1 anche se il carattere non è asterisco o punto interrogativo quindi impiegherai più tempo (almeno 3 volte del tempo necessario)
quindi modificherei la macro così:
Codice: Seleziona tutto
Sub MacroEliminaCarSpeciali2()
UR = Range("A" & Rows.Count).End(xlUp).Row
For VS1 = 32 To 255
If VS1 = 42 Then GoTo Salta1
If VS1 = 63 Then GoTo Salta2
If VS1 > 47 And VS1 < 58 Then GoTo esci  'Se numeri salta la routine
If VS1 > 65 And VS1 < 91 Then GoTo esci   'Se lett Maiusc salta la routine
If VS1 > 96 And VS1 < 123 Then GoTo esci  'Se lett minusc salta la routine

        Range("A1:A" & UR).Select
        Selection.Replace What:="" & Chr(VS1) & "", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        GoTo esci
       
Salta1:
        Range("A1:A" & UR).Select
        Selection.Replace What:="~*~", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        GoTo esci

Salta2:
        Range("A1:A" & UR).Select
        Selection.Replace What:="~?~", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
 esci:
Next VS1

End Sub


Noterai una consistente riduzione del tempo di esecuzione

Ciao

P.s. Ricorda di inserire i codici macro all'interno del Tag CODE dell'editor del post (vedi menu dell'editor)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "[Excel VBA] Ricerca e sostituisci valori multipli":


Chi c’è in linea

Visitano il forum: Nessuno e 62 ospiti