我的工作表有29行和39列。 目前我使用
lrow = ActiveSheet.UsedRange.Rows.count
- >获取使用的行数
lColumn = ActiveSheet.UsedRange.Columns.count
- >用于获取使用的列数
Excel每次运行时都会给出错误的计数。有时会给出:
行数:29列:784
在其他运行中它给出了
行:32755,列为:784
而在其他运行中,它给出了不同的值。
我检查过29行之后和39列之后没有垃圾数据。也,
在填写数据之前,我将表格清除:ActiveWorkbook.Worksheets("Field Difference").Cells.Delete
我希望ActiveWorkbook.Worksheets("Field Difference").Cells.Delete
完全清除工作表并清除工作表上的垃圾数据表。我怎样才能确保工作表中没有垃圾数据。
我明白我们还有其他选项,例如:
ActiveWorkbook.Worksheets("Field Difference").UsedRange.ClearContents
- 仅清除内容
ActiveWorkbook.Worksheets("Field Difference").UsedRange.Clear
- 清除格式。
请让我知道为什么我的行数和列数的错误值以及出路的原因是什么。我可以使用任何其他可靠方式来计算UsedRange
行数和UsedRange
列数。
答案 0 :(得分:3)
对于A栏中的最后一行和列:
Dim sht as Worksheets
dim lRow as Long
Set sht = Worksheets("Field Difference")
lRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
lCol = sht.Cells(1, sht.Columns.Count).End(xlToLeft).Column
答案 1 :(得分:1)
工作表布局可能会影响.UsedRange和.CurrentRegion属性。对于确定的“最后一个单元格”,首先按行从A1向后搜索,然后使用毯子通配符按列搜索。
dim lr as long, lc as long
with worksheets("sheet1")
lr = .cells.find(what:=chr(42), after:=.cells(1), searchdirection:=xlprevious, _
lookat:=xlpart, searchorder:=xlbyrows, lookin:=xlformulas).row
lc = .cells.find(what:=chr(42), after:=.cells(1), searchdirection:=xlprevious, _
lookat:=xlpart, searchorder:=xlbycolumns, lookin:=xlformulas).column
debug.print .cells(lr, lc).address(0, 0)
end with
答案 2 :(得分:1)
查找给定列(行)的最后一个填充单元格的方法是众所周知的。使用该列(行)最后一个单元格中的End(xlUp)
(End(xlToLeft)
)。
要获取工作表的实际填充区域的最后一个单元格,您可以使用此自定义函数,它将可靠地为您提供:
Public Function getLastCell(sh As Worksheet) As Range
Dim lastRow As Long, lastCol As Long
lastRow = sh.Cells.Find("*", sh.Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious).Row
lastCol = sh.Cells.Find("*", sh.Cells(1, 1), xlFormulas, xlPart, xlByColumns, xlPrevious).Column
Set getLastCell = sh.Cells(lastRow, lastCol)
End Function
通过引入最后一个单元格,您可以使用
从A1
到该单元格获得整个范围
mysheet.Range("A1", getLastCell(mySheet))
有时候您可能有兴趣找到不在A1
开头的人口稠密区域。在这种情况下,您可以找到类似的" Topleft"实际填充区域的单元格,使用此自定义函数:
Public Function getFirstCell(sh As Worksheet) As Range
Dim lastRow As Long, lastCol As Long
lastRow = sh.Cells.Find("*", sh.Cells(sh.Rows.Count, sh.Columns.Count), xlFormulas, xlPart, xlByRows, xlNext).Row
lastCol = sh.Cells.Find("*", sh.Cells(sh.Rows.Count, sh.Columns.Count), xlFormulas, xlPart, xlByColumns, xlNext).Column
Set getFirstCell = sh.Cells(lastRow, lastCol)
End Function
最后,您可以加入两个单元格来获取实际的ppured区域,如下所示:
mysheet.Range(getFirstCell(mySheet), getLastCell(mySheet))