View Full Version : Excel 2007 - Macro sostituzione valore
Guybrush Threepwood
29-08-2009, 17:25
DI nuovo ciao a tutti! :D
Volevo scrivere una macro per sostituire il valore /0Q/ all'interno di una cella con il valore /0M/.
Ho provato così:
Columns("B").Replace What:="/0Q/", Replacement:="/0M/", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ma eseguendola non succede nulla. Funziona invece con i numeri per esempio
Columns("B").Replace What:="1", Replacement:="7", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ma la cosa strana è che se invece scrivo
Columns("B").Replace What:="01", Replacement:="07", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
di nuovo non funziona.
Mi sapete aiutare?
DI nuovo ciao a tutti! :D
Volevo scrivere una macro per sostituire il valore /0Q/ all'interno di una cella con il valore /0M/.
Ho provato così:
Columns("B").Replace What:="/0Q/", Replacement:="/0M/", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ma eseguendola non succede nulla. Funziona invece con i numeri per esempio
Columns("B").Replace What:="1", Replacement:="7", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ma la cosa strana è che se invece scrivo
Columns("B").Replace What:="01", Replacement:="07", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
di nuovo non funziona.
Mi sapete aiutare?
Prova sostituendo xlWhole con xlPart.
Ciao
Guybrush Threepwood
29-08-2009, 18:08
Ciao,
già fatto ma non va
Mi dispiace, non so che altro consigliarti.
Ho provato sul mio pc e da me funziona perfettamente.
Ciao
Guybrush Threepwood
30-08-2009, 09:48
Ho provato a registrare una macro mentre sostituivo a mano il contenuto ed in effetti mi restituisce xlPart:
Columns("B:B").Select
Selection.Replace What:="/OQ/", Replacement:="/OM/", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Range("A1").Select
Ma quello che non capisco è perchè poi se eseguo questa macro che ho registrato poi non mi fa nessuna sostituzione (ovviamente dopo aver ripristinato il contenuto della colonna B come era prima
Guybrush Threepwood
30-08-2009, 10:20
Ehm...svelato l'inghippo :stordita:
Le celle contenevano il valore /0Q/ e non /OQ/ :ops2:
La macro registrata l'avevo fatta per un foglio ad hoc ma poi quando l'ho eseguita nel foglio che mi interessava ecco che non funzionava!
Ora però ho un altro problema e stavolta sono sicuro che non ci sono errori di battitura: lo stesso codice lo voglio utilizzare in celle contenenti una data per cambiare il mese. Quindi 08/08/1998 voglio che diventi 08/02/1998.
Se utilizzo:
Columns("G").Replace What:="/08/", Replacement:="/02/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
non succede nulla
Guybrush Threepwood
05-09-2009, 13:18
up
john_revelator
06-09-2009, 00:17
Non mi è mai capitato di fare un replace simile e adesso ho troppo sonno per sperimentare. :)
La mia è solo una supposizione ma immagino che il mancato funzionamento sia dovuto al fatto che per excel le date non sono altro che numeri interi e quindi ciò che cerchi non venga trovato.
Forse dovresti ricorrere a un if e tramite mid verificare se la porzione di stringa relativa al mese è pari a 08 e, in caso affermativo, concatenare giorno già presente, 02, e anno. Domani faccio una prova. Notte. ;)
john_revelator
06-09-2009, 10:28
Allora, dopo qualche sbattimento mi sembra di aver trovato una soluzione
Sub sostituisci()
Dim r As Range
Dim cella As Range
Dim testo As String
Set r = Sheets(1).Columns(7).Cells
For Each cella In r
If Mid(cella, 4, 2) = "08" Then
testo = Left(cella, 3) & "02" & Right(cella, 5)
r.Replace What:=cella.Value, _
Replacement:=Format(testo, "mm/dd/yyyy"), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False
End If
Next cella
End Sub
Tuttavia sono un pò perplesso per il fatto di aver dovuto impostare il formato come mm/dd/yyyy per poter ottenere la sostituzione del mese. Spero qualcuno mi sveli l'arcano. :fagiano:
boh...credo che lui cmq capisca il formato giusto....anche se glielo metti all'inglese lui comunque capisce quale è il mese...
PS: ho cmq provato ad invertirlo in dd/mm/yyyy e gli piace lo stesso :)
l'unica cosa che chiaramente nn puoi fare è mettere il formato in italiano :)
john_revelator
06-09-2009, 11:26
boh...credo che lui cmq capisca il formato giusto....anche se glielo metti all'inglese lui comunque capisce quale è il mese...
PS: ho cmq provato ad invertirlo in dd/mm/yyyy e gli piace lo stesso :)
l'unica cosa che chiaramente nn puoi fare è mettere il formato in italiano :)
Ciao zuper. Ho fatto alcune prove prima di venire a capo del suo problema e se scrivo
Replacement:=Format(testo, "dd/mm/yyyy"), _
09/08/2003 mi viene convertito in 02/09/2003, 12/08/2000 mi diventa 02/12/2000 e così via. :fagiano:
Ciao zuper. Ho fatto alcune prove prima di venire a capo del suo problema e se scrivo
Replacement:=Format(testo, "dd/mm/yyyy"), _
09/08/2003 mi viene convertito in 02/09/2003, 12/08/2000 mi diventa 02/12/2000 e così via. :fagiano:
beh tecnicamente ha ragione lui :)
è impostato il REPLACEMENT format...il che significa che comunque lui sostituisce il valore e pure il formato
Guybrush Threepwood
06-09-2009, 18:26
Grazie a tutti per i consigli. :)
Rimane solo una perplessità: perchè se registro la macro utilizzando la funzione "trova e sostituisci" (che funziona) quando poi la vado a rieseguire non mi cambia nulla.
In pratica se ho una data 02/02/2009 per cambiare solo il mese cerco /02/ e lo sostituisco con p.e. /03/ (in questo modo mi evito di cambiare anche il giorno in 03).
La ricerca e la sostituzione così fatta funziona perfettamente.
Ora però dopo aver reimpostato le date con il mese a febbraio, quando rieseguo la macro così registrata non succede nulla.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.