Sostituzione di un valore esistente con un altro valore.

Lavorando con tabelle o elenchi, può capitare di voler aggiornare dei dati, con altri dati nelle stesse celle. Si  potrebbe voler modificare, per esempio, un'aliquota iva in un elenco di articoli, che serve a calcolare il prezzo di vendita (e quindi un valore numerico), oppure  un valore percentuale di ricarico (sempre valore numerico), o ancora un nome di un agente in una lista di calcolo provvigioni (valore testo), o una data di scadenza formato data), insomma qualunque dato ci serva di voler modificare, dove esistano più valori uguali (se ci fosse da modificare un solo valore, forse conviene farlo manualmente) e PURCHE' tutti i dati da modificare siano nello stesso campo (colonna), anche se su righe non conseguenti. Se i valori da modificare fossero sempre gli stessi (modificando e modificatore), potremmo usare una routine con questi valori già impostati nel codice stesso, ma per rendere più gestibile la cosa, in modo da poter definire di volta in volta qual'è il valore da modificare e qual'è il valore che va in sostituzione, e su quale campo eseguire l'intervento, useremo tre variabili per l'assegnazione di tre celle dove scriveremo: il valore che vogliamo modificare(A1), il valore che lo sostituisce(B1), il riferimento alla colonna (campo) dove vogliamo effettuare le sostituzioni(C1). Supponiamo quindi di avere un elenco così formato (vedi sotto), e di dover provvedere alla modifica dell'aliquota iva  del 20 sostituendola con una nuova aliquota: 15 (utopia). In A1 scriveremo 20 (il valore da modificare) in B1 scriveremo 15 (il valore in sostituzione) e in C1 il riferimento alla colonna relativa all'inizio colonna dove intendiamo fare le sostituzioni (F2). L'elenco sarà lungo (supponiamo) 300 righe.
  A B C D E F G H

1

20 15 F          

2

Codice Articolo Costo Ricarico Prezzo al.iva Imp.Iva Prezzo Ven

3

               

Questa sarà la nostra routine che cercherà nel range F2:F300 tutte le celle che portano il valore 20, e lo sostituirà col valore 15:

Sub FindValore()
Dim X, Y, Z, W 
'dichiarazione variabili di tipo Variant (numeri o lettere)
X = Range("A1").Value 
'assegnazione delle variabili alle celle, in questo caso : X=20
Y = Range("B1").Value
 'nuovo  valore in sostituzione : Y=15
Z = Range("C1").Value 
'colonna su cui operare : Z=F
'assegnazione del Range di intervento (lunghezza: dalla cella 2 alla 300)
W = Z + "2:" & Z + "300"
'inizio ciclo ricerca
With Worksheets(1).Range(W)
' (W=F2:F300)
Set c = .Find(X, LookIn:=xlValues)
'c =  cerca il valore X (in A1) da cercare in W
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = Y
'se X trovato, sostituzione del valore presente in c con Y (range B1)
Set c = .FindNext(c)
'prosecuzione del ciclo ricerca
If c Is Nothing Then
Exit Sub
End If

Loop While Not c Is Nothing And c.Address <> firstAddress
End If

End With
End Sub


Se avessimo voluto sostituire dei valori fissi (20 in 15), questa la routine (più semplice):

Sub FindValoreFisso()

With Worksheets(1).Range(F2:F300)
'range in cui eseguire la ricerca
Set c = .Find(20, LookIn:=xlValues)
'si cerca il valore 20
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 15
'si sostituisce con il valore 15
Set c = .FindNext(c)
If c Is Nothing Then
Exit Sub
End If

Loop While Not c Is Nothing And c.Address <> firstAddress
End If

End With
End Sub