PDA

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?

ses4
29-08-2009, 17:48
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

ses4
30-08-2009, 08:32
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:

zuper
06-09-2009, 11:17
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:

zuper
06-09-2009, 11:39
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.