it-swarm.com.de

Wie zähle ich die Anzahl der Zeilen in Excel mit Daten?

spalte A enthält Daten wie diese (dh häufige leere Zellen):

HEADING  <-- this is A1
kfdsl
fdjgnm
fdkj

gdfkj
4353

fdjk  <-- this is A9

Ich möchte in der Lage sein, den Zellbezug der letzten Zelle zu erhalten, die Daten hat. Im obigen Beispiel möchte ich also Folgendes zurückgeben: A9

Ich habe dies versucht, aber es stoppt bei der ersten leeren Zelle (dh zurück A4)

numofrows = destsheet.Range("A2").End(xlDown).Row - 1
48
pjj

Ich mag diesen Weg:

ActiveSheet.UsedRange.Rows.Count

Dasselbe kann mit Spaltenanzahl gemacht werden. Für mich immer arbeiten. Wenn Sie jedoch Daten in anderen Spalten haben, werden diese auch im obigen Code berücksichtigt, da der Code nach dem gesamten Zellbereich im Blatt sucht.

49
Tomamais

Sicherste Option ist

Lastrow =  Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Lastcol =  Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column

Verwenden Sie nicht UsedRange oder SpecialCells(xlLastCell) oder End(xlUp). Alle diese Methoden können zu falschen Ergebnissen führen, wenn Sie zuvor einige Zeilen gelöscht haben. Excel zählt diese unsichtbaren Zellen weiterhin.

Diese Methoden funktionieren wieder, wenn Sie Ihre Zellen löschen, die Arbeitsmappe speichern, schließen und erneut öffnen.

41
nixda

Dies funktioniert unabhängig von der Excel-Version (2003, 2007, 2010). Die erste hat 65536 Zeilen in einem Blatt, während die beiden letzteren etwa eine Million Zeilen haben. Sheet1.Rows.Count gibt diese Nummer abhängig von der Version zurück.

numofrows = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp).Row

oder das Äquivalent, aber kürzer

numofrows = Sheet1.Cells(Sheet1.Rows.Count,1).End(xlUp)

Dieser durchsucht das Ende von Spalte A nach der ersten nicht leeren Zelle und erhält deren Zeilennummer.

Dies funktioniert auch, wenn Sie Daten haben, die in anderen Spalten weiter unten stehen. Wenn Sie zum Beispiel Ihre Beispieldaten nehmen und auch etwas in die Zelle FY4763 schreiben, wird das oben Gesagte immer noch korrekt 9 zurückgeben (nicht 4763, was jede Methode, die die Eigenschaft UsedRange einbezieht, fälschlicherweise zurückgeben würde).

Beachten Sie, dass Sie nur Folgendes verwenden sollten, wenn Sie die Zellreferenz verwenden möchten. Sie müssen nicht zuerst die Zeilennummer abrufen und dann den Zellbezug erstellen.

Set rngLastCell = Sheet1.Range("A1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

Beachten Sie, dass diese Methode in bestimmten Edge-Fällen fehlschlägt:

  • Letzte Zeile enthält Daten
  • Letzte Zeile (n) werden ausgeblendet oder herausgefiltert

Achten Sie also darauf, ob Sie für diese Dinge die Zeile 1.048.576 verwenden möchten!

Ich habe alle Möglichkeiten mit einem langen Testblatt verglichen:

0,140625 sec für

lastrow = calcws.Cells.Find("*", [A1], , , xlByColumns, xlPrevious).row

0 Sek. Für

iLastRow = calcws.Cells(rows.count, "a").End(xlUp).row

und

numofrows = calcws.Cells.SpecialCells(xlLastCell).row

0,0078125 Sek. Für

lastrow = calcws.UsedRange.rows.count
Do While 1
    If calcws.Cells(lastrow, 1).Value = "" Then
        lastrow = lastrow - 1
    Else
        Exit Do
    End If
Loop

Ich denke, die Favoriten liegen auf der Hand ...

19
sven

Dim RowNumber As Integer
RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row

In Ihrem Fall sollte es # 9 zurückgeben

6
Lubor

Fanden diesen Ansatz auf einer anderen Website. Es funktioniert mit den neuen, größeren Excel-Formaten und erfordert keine feste Kodierung der maximalen Anzahl von Zeilen und Spalten.

iLastRow = Cells(Rows.Count, "a").End(xlUp).Row
iLastCol = Cells(i, Columns.Count).End(xlToLeft).Column

Danke an Mudraker in Melborne, Australien

5
MonroeGA

Dies würde auch funktionieren und Excel das letzte Mal definieren lassen, wenn Daten angezeigt werden

numofrows = destsheet.UsedRange.SpecialCells(xlLastCell).row

numofrows = destsheet.Cells.SpecialCells(xlLastCell).row
3
Hari Seldon
  n = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
2
Dado

Ich bevorzuge die Verwendung der CurrentRegion-Eigenschaft, die Strg- * entspricht und den aktuellen Bereich mit Daten auf den größten zusammenhängenden Bereich erweitert. Sie beginnen mit einer Zelle oder einem Bereich, von dem Sie wissen, dass er Daten enthält, und erweitern ihn dann. Die UsedRange-Eigenschaft gibt manchmal große Bereiche zurück, nur weil jemand am unteren Rand des Blatts eine Formatierung vorgenommen hat.

Dim Liste As Worksheet    
Set Liste = wb.Worksheets("B Leistungen (Liste)")     
Dim longlastrow As Long
longlastrow = Liste.Range(Liste.Cells(4, 1), Liste.Cells(6, 3)).CurrentRegion.Rows.Count
1
Andrew Magerman

Zur besseren Übersicht möchte ich ein klares Beispiel hinzufügen und ausführen

            openFileDialog1.FileName = "Select File"; 
            openFileDialog1.DefaultExt = ".xls"; 
            openFileDialog1.Filter = "Excel documents (.xls)|*.xls"; 


            DialogResult result = openFileDialog1.ShowDialog();


            if (result==DialogResult.OK)
            {

                string filename = openFileDialog1.FileName;


                Excel.Application xlApp;
                Excel.Workbook xlWorkBook;
                Excel.Worksheet xlWorkSheet;
                object misValue = System.Reflection.Missing.Value;

                xlApp = new Excel.Application();
                xlApp.Visible = false;
                xlApp.DisplayAlerts = false;



                xlWorkBook = xlApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

                var numRows = xlWorkSheet.Range["A1"].Offset[xlWorkSheet.Rows.Count - 1, 0].End[Excel.XlDirection.xlUp].Row;

                MessageBox.Show("Number of max row is : "+ numRows.ToString());

                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();

            }
1
daniele3004