Salve a tutti.
Prima qualche appunto: riguardo alle celle unite, come già sottolineato da Ricky, se si intende usare il VBA, è molto meglio evitarle.
Spesso le celle unite provocano degli errori di esecuzione.
Un'altra cosa: un codice come questo
- Codice: Seleziona tutto
Range("D" & Riga).Select
Selection.Copy
Range("E" & Riga).Select
ActiveSheet.Paste
è il tipo di codice generato dal registratore di macro, che registra passo passo ogni azione compiuta dall'utente.
Quando si programma, non c'è nessuna necessità di ripercorrere gli stessi passi; per eseguire la copia è sufficiente
- Codice: Seleziona tutto
Range("D" & Riga).Copy Destination:=Range("E" & Riga)
Infine, quando inserisci del codice nel post, si deve usare il tag CODE, che migliora la leggibilità e mantiene l'indentazione del codice (se c'è).
Arrivando alla tua richiesta: non è chiaro se vuoi (nel caso di celle unite) copiare solo il valore in D:E oppure copiare le celle unite.
Infine, non hai bisogno di usare un ciclo for...next a meno che alcune celle siano unite e altre no.
Se vuoi copiare solo i valori il codice sarebbe questo:
- Codice: Seleziona tutto
For riga = 6 To 15
With Range("D" & riga)
If .MergeCells Then
.Copy Range("F" & riga)
.Copy Range("H" & riga)
Else
.Copy Range("E" & riga)
.Copy Range("F" & riga)
End If
End With
Next riga
Se invece le celle in colonna D:E sono o tutte unite o nessuna puoi fare a meno del ciclo
- Codice: Seleziona tutto
With Range("D6:D15")
If .MergeCells Then
.Copy Range("F6")
.Copy Range("H6")
Else
.Copy Range("E6:F6")
End If
End With