用usedrange获取已用区域的首行行号,首列列号,最后一行行号,最后一列列号。注意已用区区域包括内容为空,但设置过格式的单元格。
首行: ActiveSheet.UsedRange.row
最后一行:ActiveSheet.UsedRange.row + ActiveSheet.UsedRange.rows.count - 1
首列: ActiveSheet.UsedRange.column
最后一列:ActiveSheet.UsedRange.column + ActiveSheet.UsedRange.columns.count -1
工作表的最后一个非空行行号 endrow = Cells.Find("*", Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
工作表的最后一个非空列列号 endcol = Cells.Find("*", Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
用find得出为的最后一个非空行行号肯定要小于或等于usedrange得到的的最后一行行号。
用find得出为的最后一个非空列列号肯定要小于或等于usedrange得到的的最后一列列号。
用find取最后非空行和非空列时,如果有隐藏的行或列,或是筛选过行或列,将可能无法得到真正的非空行和非空列。
用Range(“A65536”).End(xlUp).Row取A列最后一个非空行时,也会受隐藏行或筛选行的干扰。
UsedRange和find两者取得的最后非空行或非空列的差就是非数据区的空行。理论上来说应该可以删除,不影响工作表数据。并且还可以减小工作薄体积。
用 LastRow = [MAX((A1:A65536<>"")*ROW(A1:A65536))]可以得出A列最后一个非空行的行号,不管是否有隐藏或是筛选。
也可以用下面这样表示:
lastrow = Evaluate("MAX((A1:A" & Rows.Count & "<>"""")*ROW(A1:A" & Rows.Count & "))")
这同样是求当前活动工作表A列中最后一个非空行号。
如果要求指定工作表中的A列的最后一个非空行号,只需加上指定的工作表名即可,如同下面的样式:
lastrow = Evaluate("MAX(('表1全网性各专业汇总'!A1:A" & Rows.Count & "<>"""")*ROW('表1全网性各专业汇总'!A1:A" & Rows.Count & "))")
该方式同样不受隐藏行或是筛选的影响。
|