[Risolto] Sostituire valori in un range
[Risolto] Sostituire valori in un range
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.
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.
Ultima modifica di charlie il martedì 13 maggio 2014, 18:09, modificato 2 volte in totale.
Motivazione: Sistemato Risolto ed inserito segno di spunta verde
Motivazione: Sistemato Risolto ed inserito segno di spunta verde
LibreOffice 7.3.7.2 su LinuxMint 21.3
Re: Sostituire valori in un range
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
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Sostituire valori in un range
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.
Grazie.
LibreOffice 7.3.7.2 su LinuxMint 21.3
Re: Sostituire valori in un range
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.
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.
LibreOffice 7.3.7.2 su LinuxMint 21.3
Re: Sostituire valori in un range
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
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Sostituire valori in un range
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
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
LibreOffice 7.3.7.2 su LinuxMint 21.3
Re: Sostituire valori in un range
allega un file di esempio, a me funziona
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Sostituire valori in un range
Allego il file. La macro ultima è sostituzione_1
A me continua a riempire le celle di zeri..
Grazie
A me continua a riempire le celle di zeri..
Grazie
- Allegati
-
- provaxforum.ods
- (14.01 KiB) Scaricato 266 volte
LibreOffice 7.3.7.2 su LinuxMint 21.3
Re: Sostituire valori in un range
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
Devi inserire string al posto del value evidenziato
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: Sostituire valori in un range
OOOOKK! Funzione benissimo. Grazie mille sei troppo gentile.
LibreOffice 7.3.7.2 su LinuxMint 21.3