如何计算excel中的行数与数据?

列A有这样的数据(即频繁的空白单元格):

HEADING <-- this is A1 kfdsl fdjgnm fdkj gdfkj 4353 fdjk <-- this is A9 

我希望能够得到有数据的最后一个单元格的单元格引用。 所以在上面的例子中,我想返回: A9

我已经尝试过,但它停在第一个空白单元格(即返回A4

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

我喜欢这种方式:

ActiveSheet.UsedRange.Rows.Count

列数也可以做到这一点。 对我来说,总是工作。 但是,如果在另一列中有数据,则上面的代码也会考虑它们,因为代码正在查找表单中的所有单元格区域。

最安全的select是

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

不要使用UsedRangeSpecialCells(xlLastCell)End(xlUp) 。 如果以前删除了一些行,所有这些方法可能会给出错误的结果。 Excel仍然计数这些不可见的单元格。

这些方法将再次工作,如果您删除您的单元格,保存工作簿,closures并重新打开它。

这将工作,独立于Excel版本(2003,2007,2010)。 第一个在一个表中有65536行,而后两个有一百万行左右。 Sheet1.Rows.Count根据版本返回这个数字。

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

或相当于更短

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

这从列A的底部search第一个非空单元格,并获取其行号。

如果您的数据在其他列中进一步下移,这也是有效的。 所以举个例子,如果你把你的示例数据也写在FY4763单元格,上面仍然会正确地返回9(不是4763,涉及UsedRange属性的任何方法将不正确地返回)。

请注意,如果您需要单元格引用,则应该使用以下内容。 您不必先获取行号,然后构build单元格引用。

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

请注意,此方法在某些边缘情况下失败:

  • 最后一行包含数据
  • 最后一行被隐藏或过滤掉

所以要小心,如果你打算使用1,048,576行这些东西!

我把所有的可能性都与一张长的试卷相比较:

0,140625秒

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

0秒

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

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

0,0078125秒

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

我认为collections是显而易见的…

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

在你的情况下,它应该返回#9

在另一个网站上find这种方法。 它适用于新的较大的Excel,不需要硬编码最大数量的行和列。

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

感谢澳大利亚Melborne的mudraker

这两者都可以工作,让Excel定义上次看到数据的时间

 numofrows = destsheet.UsedRange.SpecialCells(xlLastCell).row numofrows = destsheet.Cells.SpecialCells(xlLastCell).row 
  n = ThisWorkbook.Worksheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 

为了更清楚,我想添加一个清晰的例子和运行

  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(); } 

让 – 弗朗索瓦·科贝特(Jean-FrançoisCorbett)在上面的重要答案中缺less了“罗” 新用户可能会由于缺less的说法而感到困惑。

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

如键入将提供最后使用的单元格的值。

 `Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row` 

与.Row结尾将提供第1列的最后一个单元格的行,作为让计划。

我更喜欢使用CurrentRegion属性,这相当于Ctrl- *,它将当前范围扩展为具有数据的最大连续范围。 你从一个单元格或范围开始,你知道它将包含数据,然后展开它。 UsedRange属性有时会返回巨大的区域,只是有人在表单的底部做了一些格式化。

 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