2014-11-21 10 views
19

Mi stavo chiedendo se potessi aiutarmi a capire meglio cosa fa .Cells(.Rows.Count,"A").End(xlUp).row. Capisco la parte prima della parte .End.Significato di .Cells (.Rows.Count, "A"). End (xlUp) .row

+4

Dato un 'With' * qualche oggetto intervallo * presumo? –

+2

prima di '.end', va all'ultima cella possibile della colonna A (quindi suppongo A65535), quindi il' .end (xlup) 'torna indietro finché non trova qualcos'altro che una cella vuota, e infine il' .row' dà la fila di questa cella –

risposta

31

Viene utilizzato per trovare il numero di righe contenenti dati in un foglio di lavoro che contiene dati nella colonna "A". L'utilizzo completo è

lastRowIndex = ws.Cells(ws.Rows.Count, "A").End(xlUp).row 

Dove ws è un oggetto Foglio di lavoro. Nell'esempio domande si è implicito che la dichiarazione era all'interno di un blocco di With

With ws 
    lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row 
End With 
  1. ws.Rows.Count restituisce il numero totale di righe nel foglio di lavoro (1048576 in Excel 2010).
  2. .Cells(.Rows.Count, "A") restituisce il fondo più cellule nella colonna "A" nel foglio di lavoro

Poi c'è il metodo di End. Il documentation è ambiguo su ciò che fa.

restituisce un oggetto Range che rappresenta la cella alla fine della regione che contiene l'intervallo sorgente

particolare non definisce ciò che una "regione" è. La mia comprensione è che una regione è un intervallo contiguo di celle non vuote. Quindi l'utilizzo previsto è di iniziare da una cella in una regione e trovare l'ultima cella in quella regione in quella direzione dalla cella originale. Tuttavia ci sono più eccezioni per quando non si usa così:

  • Se l'intervallo è più celle, userà la regione di rng.cells(1,1).
  • Se l'intervallo non si trova in una regione o l'intervallo è già alla fine della regione, percorrerà la direzione finché non entrerà in una regione e restituirà la prima cella rilevata in quella regione.
  • Se incontra il bordo del foglio di lavoro, restituirà la cella sul bordo del foglio di lavoro.

Quindi Range.End non è una funzione banale.

  1. .row restituisce l'indice di riga di quella cella.
+0

Grazie mille! :) – rmdlp

8

La prima parte:

.Cells(.Rows.Count,"A") 

vi manda la riga inferiore della colonna A, che si sapeva già.

La funzione Fine inizia da una cella e quindi, in base alla direzione indicata, procede in tale direzione fino a raggiungere il bordo di un gruppo di celle con testo. Che significa, se si dispone di testo in celle C4: E4 e si digita:

Sheet1.Cells(4,"C").End(xlToRight).Select 

Il programma selezionerà E4, la cella più a destra con il testo in esso.

Nel tuo caso, il codice sta sputando la riga dell'ultima cella con del testo nella colonna A. Questo ti aiuta?

13
[A1].End(xlUp) 
[A1].End(xlDown) 
[A1].End(xlToLeft) 
[A1].End(xlToRight) 

è l'equivalente VBA di essere in cella A1 e premendo Ctrl + qualsiasi tasto freccia. Continuerà a viaggiare in quella direzione fino a quando non raggiunge l'ultima cella di dati o se si utilizza questo comando per spostarsi da una cella che è l'ultima cella di dati che percorrerà fino a raggiungere la cella successiva contenente i dati.

Se si desidera trovare l'ultima cella "utilizzata" nella Colonna A, è possibile passare a A65536 (ad esempio, in una cartella di lavoro XL93-97) e premere Ctrl + Su per "eseguire lo snap" sull'ultima cella utilizzata. Oppure in VBA scrivere:

Range("A65536").End(xlUp) che può essere nuovamente riscritto come Range("A" & Rows.Count).End(xlUp) per motivi di compatibilità su cartelle di lavoro con numeri di righe diversi.

1
.Cells(.Rows.Count,"A").End(xlUp).row 

penso che il primo punto tra parentesi non dovrebbe essere lì, voglio dire, si dovrebbe scrivere in questo modo:

.Cells(Rows.Count,"A").End(xlUp).row 

prima che le cellule, è possibile scrivere il nome del foglio di lavoro, per esempio:

Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).row 

Il nome del foglio di lavoro non è necessario quando si opera sullo stesso foglio di lavoro.