[Risolto] Sostituire valori in un range

Creare una macro - Scrivere uno script - Usare le API
Rispondi
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

[Risolto] Sostituire valori in un range

Messaggio 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.
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
LibreOffice 7.3.7.2 su LinuxMint 21.3
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sostituire valori in un range

Messaggio 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
-------------------
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
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

Re: Sostituire valori in un range

Messaggio 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.
LibreOffice 7.3.7.2 su LinuxMint 21.3
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

Re: Sostituire valori in un range

Messaggio 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.
LibreOffice 7.3.7.2 su LinuxMint 21.3
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sostituire valori in un range

Messaggio 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
-------------------
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
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

Re: Sostituire valori in un range

Messaggio 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
LibreOffice 7.3.7.2 su LinuxMint 21.3
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Sostituire valori in un range

Messaggio da patel »

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
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

Re: Sostituire valori in un range

Messaggio da mario-T »

Allego il file. La macro ultima è sostituzione_1
A me continua a riempire le celle di zeri..
Grazie
Allegati
provaxforum.ods
(14.01 KiB) Scaricato 265 volte
LibreOffice 7.3.7.2 su LinuxMint 21.3
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Sostituire valori in un range

Messaggio 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
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
mario-T
Messaggi: 38
Iscritto il: venerdì 7 marzo 2014, 12:48

Re: Sostituire valori in un range

Messaggio da mario-T »

OOOOKK! Funzione benissimo. Grazie mille sei troppo gentile.
LibreOffice 7.3.7.2 su LinuxMint 21.3
Rispondi