如何用数据计算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
列数也可以这样做。对我来说,永远工作。但是,如果您在另一列中有数据,那么上面的代码也会考虑它们,因为该代码正在查找工作表中的所有单元格范围。     
        最安全的选择是
Lastrow =  Cells.Find(\"*\", [A1], , , xlByRows, xlPrevious).Row
Lastcol =  Cells.Find(\"*\", [A1], , , xlByColumns, xlPrevious).Column
不要使用
UsedRange
SpecialCells(xlLastCell)
End(xlUp)
。如果您以前删除了一些行,所有这些方法可能会产生错误的结果。 Excel仍会计算这些不可见的单元格。 如果删除单元格,保存工作簿,然后关闭然后重新打开,这些方法将再次起作用。     
        这将独立于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的底部向上搜索第一个非空单元格,并获取其行号。 如果您在其他列中有更深的数据,这也可以使用。因此,例如,如果您获取示例数据并在单元格FY4763中写了一些内容,则上面的内容仍将正确返回9(而不是4763,任何涉及
UsedRange
属性的方法都将错误地返回)。 请注意,实际上,如果要使用单元格引用,则应使用以下内容。您不必先获取行号,然后构建单元格引用。
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
我认为收藏夹很明显...     
        
Dim RowNumber As Integer
RowNumber = ActiveSheet.Range(\"A65536\").End(xlUp).Row
在您的情况下,它应该返回#9     
        在另一个站点上找到了这种方法。它可以与新的更大尺寸的Excel配合使用,不需要您对最大的行和列数进行硬编码。
iLastRow = Cells(Rows.Count, \"a\").End(xlUp).Row
iLastCol = Cells(i, Columns.Count).End(xlToLeft).Column
感谢澳大利亚梅尔伯恩市的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();

            }
    
        我更喜欢使用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
    

要回复问题请先登录注册