嘻皮客娱乐学习网

标题: excel取数据区最后一行行号和最后一列列号的问题。 [打印本页]

作者: xipick    时间: 2016-9-11 00:38
标题: excel取数据区最后一行行号和最后一列列号的问题。
用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 & "))")
该方式同样不受隐藏行或是筛选的影响。







欢迎光临 嘻皮客娱乐学习网 (http://www.xipick.com/) Powered by Discuz! X3.3