2012-07-21 11 views
7

Obiettivo:
Una variabile deve contenere la quantità di righe da un foglio specifico.Quantità di righe nel foglio

Problema:
Quale codice di sintassi in VBA di Excel devo contare la quantità di righe dal foglio?

+0

Se vuoi dire le righe totali, 'Worksheet.Rows.Count' lo farà. Se intendi qualcos'altro, faccelo sapere. –

risposta

14

utilizzando il metodo UsedRange è uno dei miei preferiti ma deve essere trattato con cura. Ha alcuni difetti/trucchi. È un problema noto che excel non tiene traccia della gamma usata molto bene. Qualsiasi riferimento all'intervallo utilizzato tramite VBA reimposterà il valore all'intervallo corrente utilizzato. Quindi provare a eseguire questa procedura secondaria quando si stanno ottenendo l'intervallo utilizzato:

Dim lRowCount as Long 

Application.ActiveSheet.UsedRange 
lRowCount = Worksheets("MySheet").UsedRange.Rows.Count 

Ma essere consapevoli che questo vi darà il conteggio utilizzato gamma, quindi se avete righe vuote nella parte superiore della cartella di lavoro (che spesso le persone fanno spazio per cose come i criteri di filtro, ecc.) quindi non verranno contate. Il metodo usato può anche essere influenzato dalla formattazione.

Se si desidera che l'ultima riga utilizzato, che è quello che penso che si desidera, è possibile utilizzare il metodo Find, che è più affidabile:

Dim rLastCell As Range 
Dim lLastRow As Long 

Set rLastCell = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

If Not rLastCell Is Nothing Then lLastRow = rLastCell.Row 

Se sai che hai almeno uno cella con i dati in esso, allora si può semplificare il precedente per:

Dim lLastRow As Long 

lLastRow = ActiveSheet.Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 

See here regarding used range I spoke about above

5

Si può anche provare:

i = Sheets("SheetName").UsedRange.Rows.Count 

Tuttavia, questo può diventare un po 'buggy, se si avvia la cancellazione e la compensazione righe.

Un modo migliore per farlo è:

i = Cells(Sheets("SheetName").Rows.Count, 1).End(xlup).Row 

Ciò presuppone che ogni riga contiene dati nella colonna 1.

Problemi correlati