- Codice: Seleziona tutto
UC = Cells(10, Columns.Count).End(xlToLeft).Column
UC (variabile) assume il valore del numero colonne con dati a partire dalla colonna più a destra (in office 2003 dalla colonna "IV" verso sinistra quindi verso la colonna "A").
Il 10 si intende sulla riga 10
se in C10 hai una cella con un dato (valore numerico o stringa) UC sarà uguale a 3.
Ucase è una funzione che converte il testo in maiuscolo
Per evitare che errori di scrittura maiuscola o minuscola (x o X) possano non far accettare la condizione,
con Ucase qualsiasi sia il carattere il confronto lo farà con la "X" (maiuscola), in quanto lo converte (solo per il confronto)
Per l'ultimo quesito
puoi ottenere lo spostamento della X man mano che processi il foglio (vedi le 2 righe commentate)
oppure, se la X non occuperà mai la cella "A2", facendo slittare l'intera riga utilizzando il codice aggiunto alla fine (che lascio attivo)
- Codice: Seleziona tutto
Sub Spostadati()
Foglio = "Foglio1"
Worksheets(Foglio).Select
UC = Cells(2, Columns.Count).End(xlToLeft).Column
For CC = 1 To UC
If UCase(Cells(2, CC).Value) = "X" Then
Range(Cells(4, CC - 1), Cells(6, CC)).Copy
Range(Cells(4, CC), Cells(6, CC + 1)).PasteSpecial Paste:=xlPasteFormulas
Range(Cells(4, CC - 1), Cells(6, CC - 1)).ClearContents
' Cells(2, CC).Cut Destination:=Cells(2, CC + 1) '<<<<< commentata perché utilizza l'altro codice
' CC = CC + 1 '<<<<< commentata perché utilizza l'altro codice
End If
Next CC
Application.CutCopyMode = False
Range("A2").Insert Shift:=xlToRight '<<<<< fa slittare l'intera riga verso destra
End Sub
Ciao
P.s. ieri avevo pensato di far slittare la X per evitare di perdere i dati (in colonna C e D) se attivi la macro per due volte consecutive.
ora non li perdi ma rischi di spostare ugualmente se, per errore, avvi la macro più volte.
Forse è il caso di inserire una sicurezza registrando la data di esecuzione macro
e se il mese è identico a quello di registrazione la macro non si attiva, cosa ne pensi?
