在VB.NET中我想得到用过的行,所以我写了:
Dim objWorksheet As Excel.Worksheet = workbook.Sheets(2)
Dim lastRow = objWorksheet.UsedRange.Rows.Count
但是我不知道为什么lastRow的数字是小而不是实际使用的行,我搜索了stackoverflow,有人建议像这样写:
Dim range As Excel.Range = objWorkSheet.UsedRange
Dim lastRow = range.Rows.Count
我试过并且也没有用,num返回比实际使用的行少没有规则,所以我不知道如何处理它,任何想法都有帮助,非常感谢
在我搜索 this question 的答案的帮助下,它是对上次使用的行的全面理解并给出最终答案
代码UsedRange.Rows.Count
表示从包含数据的最后一行数据的第一行开始,这意味着您可以在第一个非空行到最后一个非空行之间有空行,这些行不会影响结果,但如果第一行为空,结果将是实际非空行的一个,如果前两行为空,结果将少两个,所以链接问题表示从不使用{{1}得到最后一行
答案 0 :(得分:3)
尽量避免使用UsedRange
。这可能会产生误导。例如,如果您填写范围A1:B5
并清除列B
的内容,则UsedRange.Columns.Count
将返回2
- ,因为Excel会记住带有格式的单元格并将它们包含在UsedRange中。
<强>更新强>
要获取真实最后一列和一行,请使用以下代码:
lRealLastRow = _
Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
lRealLastColumn = _
Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column
更新2
答案 1 :(得分:2)
有时只有出现太小。说我们有:
我们跑:
Sub aRowsByAnyOtherName1()
Dim N As Long
N = ActiveSheet.UsedRange.Rows.Count
MsgBox N
End Sub
我们看到:
我们获取 3 而不是 4 的原因是工作表的第一行不在UsedRange
!
修改#1:强>
如果&#34; top&#34;需要包含工作表,然后使用:
Sub aRowsByAnyOtherName2()
Dim N As Long, rng As Range
Set rng = ActiveSheet.UsedRange
N = rng.Rows.Count + rng(1).Row - 1
MsgBox N
End Sub
答案 2 :(得分:1)
对于你所说的&#34;使用&#34;这是一个小小的平底船。行。如果工作表开头有任何空行,您将得到错误的最后一行编号,但您将获得使用的范围行数。
在第1行空白时尝试以下操作。
Option Explicit
Sub test()
Dim rng As Range
Set rng = ActiveSheet.UsedRange
Debug.Print rng.Rows.Count '2
Debug.Print ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row '3
End Sub
这使用了2来自UsedRange.Rows.Count,3来自使用xlCellTypeLastCell,数据如下:
答案 3 :(得分:0)
我正在使用Excel 2013,据我所知,UsedRange和UsedRange.Count属性正常工作
在以前的版本中,我记得它们是不可靠的,我认为这可能是一些较旧的帖子的原因,例如stackoverflow.com/questions/11169445...
请注意,UsedRange是一个矩形区域,由顶部,右侧,底部和最左侧界定 非空白单元格,因此最后使用的行是
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
还请注意,UsedRange包含具有任何内容的所有单元格,例如边框,内部着色或注释,而不仅仅是具有值或公式的单元格
根据您要实现的目标,使用SpecialCells和Find方法可能更可取;例如,最后使用的行也可以使用
找到ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row