设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[OFFICE] excel取数据区最后一行行号和最后一列列号的问题。

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-11 00:38:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用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 & "))")
该方式同样不受隐藏行或是筛选的影响。


回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-4-29 09:04 , Processed in 0.185494 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表