› Excel e gli applicativi Microsoft Office › Selezione ultime celle colonne
-
AutoreArticoli
-
Ciao,
vorrei poter selezionare le ultime celle attive di tre colonne( in questo caso "A", "B" e "C". Le celle sono sempre contigue.
Ho trovato questo codice ma mi permette di selezionare solo l'ultima cella di una colonna alla volta
ActiveSheet.Range("a1").End(xlDown).SelectL'istruzione che hai mostrato infatti è equivalente a:
- posizionati sulla cella A1 del foglio corrente,
- premei (virtualmente) il tasto End sulla tastiera,
- premi quindi il tasto freccia giù.
Per selezionare un range di celle devi impostare un riferimento a un range di celle; ci sono diverse soluzioni, una semplice è:
- calcolare l'ultima riga del range
- impostare (o selezionare) un range composto, in cui la prima cella ha posizione (A, ultima riga) e l'ultima cella ha posizione (C, ultima riga)
Ciao!
Dunque ho provato per step selezionando il Range di partenza
Dim Pippo As String Pippo = Range("A1:C1").SelectHo provato poi a selezionare il le ultime celle del range ma da errore:
Dim Pippo As String Pippo = Range("A1:B1") Range("Pippo").End(xlDown).SelectDove sbaglio?
L'errore nel primo esempio è che tu associ a una variabile di tipo stringa l'operazione di selezione di un range. Poichè selezionare un range è un'operazione che ha generalmente successo, il risultato dell'operazione è "True" che viene assegnato alla variabile pippo, e quindi convertito in testo. Tanto vero che il VarType di pippo dopo l'assegnazione è 8 cioè vbString.
Nel secondo esempio tenti invece di assegnare a una variabile di tipo stringa un range di più celle, ma subito scatta l'errore di tipo non corrispondente perchè un range è solitamente un oggetto e l'assegnazione degli oggetti si fa con la sintassi "Set var = object", nel tuo caso avrebbe dovuto essere quindi:
Dim pippo as Range Set pippo = Range("A1:B1")Ora però pippo non è un "nome definito" nel foglio, ma una variabile di tipo range che punta alle due celle indicate. Quindi anche l'istruzione successiva genera errore. Dovrebbe essere semplicemente:
pippo.End(xlDown).selectTi invito a pensare così: devo partire dalla prima cella del range in colonna A, spostarmi all'ultima cella piena di tale colonna, salvare il valore della riga cui sono arrivato, quindi costruire un range composto da tre celle, in cui la lettera (la colonna) va da A a C e il valore della riga è invece già salvato. Quando ho costruito un range siffatto, lo posso "select-ionare" (scusa il neologismo).
Prova così
W = Cells(Rows.Count, 1).End(xlUp).Row Range("a" & W, "c" & W).SelectCiao
risolto così:
ActiveSheet.Range("a1").End(xlDown).Select ActiveSheet.Range(ActiveCell, ActiveCell.Offset(0, 3)).Selectho trovato l'ultima cella e da li ho creato una selezione con l'intervallo delle tre colonne!
Ottimo!
Ci sono altri modi, come anche poco fa ti è stato illustrato.
Tendenzialmente è preferibile non selezionare la cella direttamente ma lavorare con le variabili (spostare il cursore non è quasi mai necessario anche perchè ciò rallenta l'esecuzione e a volte produce effetti collaterali).
Comunque sono contento del tuo risultato 🙂
-
AutoreArticoli
