Pagina 1 di 1
[Risolto] Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 7:18
da mario-T
Ciao, avrei bisogno di una macro o ancora meglio di una formula che mi sostituisca tutti i valori uguali in certo range con un altro valore preso da un' altra cella.
Esempio trovare nel RANGE: a1:h12 tutti i valori 5 e sostituirli con il contenuto della cella a20.
Io in teoria, non ho provato, credo di essere in grado di fare una macro che controlla cella x cella tutti i valori del range e quando trova quello giusto lo sostituisce con quello nuovo, ma il problema è che i range da controllare sono decine quindi con una formula già presente nel foglio basterebbe incollare i dati nel punto giusto per avere risultati immediati.
Grazie comunque x l'attenzione.
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 7:54
da patel
non credo si possa fare con formule, prova questa macro
Codice: Seleziona tutto
Sub replaceInRange
Dim Doc As Object, Sheet As Object, sostituisci As Object
Doc = ThisComponent
Sheet = Doc.Sheets(0)
sostituisci = Sheet.getCellRangeByName("a1:h12").createReplaceDescriptor()
sostituisci.SearchString = 5
sostituisci.ReplaceString = Sheet.getCellRangeByName("a20").value
Sheet.ReplaceAll(sostituisci)
end sub
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 8:04
da mario-T
Ciao, e grazie, difatti anche io credo con una formula non si possa fare, e se dovessi lanciare una macro che nella stesso range sostituisce più valori? Tipo nel range a1:h12 sostituire 1 con il contenuto della cella a20; il 2 con il ocntenuto della cella a21; e così via. In quanto lo scopo finale è questo, ecco perchè se trovavo una formula credevo fosse meglio.
Grazie.
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 8:28
da mario-T
Intanto ho fatto delle prove con la macro consigliatami, ed ho trovato qualche problema.
Il primo è stato che siccome il contenuto da sostituire è una stringa nelle celle da modificare mi apparivano delle date ed allora ho modificato:
sostituisci.ReplaceString = Sheet.getCellRangeByName("a20").value
in
sostituisci.ReplaceString = Sheet.getCellRangeByName("a20").string
ed ora la sostituzione è corretta.
Secondo problema
la macro non correge solo i valori nel range, ma quelli di tutto il foglio
Non sarebbe un problema ma è tanto per capire e comunque qui non so cosa fare....
Terzo problema
se come da esempio cerco di sostituire tutti i 5 con la stringa in a20 non solo sostituisce tutti i 5 ma 15 diventa 1+il contenuto della cella a20. Ho provato a modificare questa riga
sostituisci.SearchString = 5
con
sostituisci.SearchValue = 5
Ma è uscito un errore.
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 9:04
da patel
hai ragione, questo metodo non va bene nel tuo caso, occorre ripiegare sul classico loop
Codice: Seleziona tutto
Sub scanrange
Doc = ThisComponent
Sheet=doc.sheets(0)
rng = Sheet.getCellRangeByName("a1:h12")
col1= rng.RangeAddress.StartColumn
col2= rng.RangeAddress.EndColumn
row1= rng.RangeAddress.StartRow
row2= rng.RangeAddress.EndRow
for row=row1 to row2
for col =col1 to col2
if Sheet.getCellByPosition(col, row).value = 5 then Sheet.getCellByPosition(col, row).value = Sheet.getCellRangeByName("a20").value
next
next
End Sub
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 9:22
da mario-T
La modifica con i cicli for next ha dei vantaggi, nel senso che corregge solo le celle con 5 e non quelle con 15 o 25 etc, ma il valore immesso è 0 (zero). Ho provato a cambiare questa parte:
if Sheet.getCellByPosition(col, row).value = 5 then Sheet.getCellByPosition(col, row).value = Sheet.getCellRangeByName("j2").value
con
if Sheet.getCellByPosition(col, row).value = 5 then Sheet.getCellByPosition(col, row).value = Sheet.getCellRangeByName("j2").string
ma nulla
poi dovrei anche inserire il tutto all' interno di un ciclo più grande, per cercare anche altri numeri e cambiarli con il contenuto di altre celle, ma quello sulla tua base credo (spero)di poterlo creare
Ciao e grazie
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 10:53
da patel
allega un file di esempio, a me funziona
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 11:41
da mario-T
Allego il file. La macro ultima è sostituzione_1
A me continua a riempire le celle di zeri..
Grazie
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 11:56
da unlucky83
if Sheet.getCellByPosition(col, row).value = 5 then Sheet.getCellByPosition(col, row).value = Sheet.getCellRangeByName("j2").string
Devi inserire string al posto del value evidenziato
Re: Sostituire valori in un range
Inviato: martedì 13 maggio 2014, 12:23
da mario-T
OOOOKK! Funzione benissimo. Grazie mille sei troppo gentile.