VBA每日一练(10)range.end() 或 cells().end() 用法,偏移 且 查找非空单元格,取最大最小行列数
增加一种数组的方法去取······
- 二维数组边界
- lbound(arr1,1) 第1维的下边界,excel里的最小行数
- ubound(arr1,1) 第1维的上边界,excel里的最大行数
- lbound(arr1,2) 第2维的下边界,excel里的最小列数
- ubound(arr1,2) 第2维的上边界,excel里的最大行数
1 .end() 是先向指定方向偏移一格后,查找这个方向的最后一个非空单元格
原始数据
(1,3) | 1:00 AM | 1:00 AM | ||||
2 B | (2,4) | 2 B | ||||
(3,3) | 3 C | (3,5) | ||||
参考
https://www.jianshu.com/p/49b24de9bab6
基本语法
- cells.end() 返回一个range对象,偏移 且 查找非空单元格
- range.end() 返回一个range对象 ,偏移 且 查找非空单元格
- cells.end(xltoleft) 1 等同于按 end+向左箭,或ctrl+向左箭,往左边偏移1,且找到最左边的非空单元格
- cells.end(xltoright) 2 等同于按 end+向右箭,或ctrl+向右箭,往右边偏移1,且找到最右边的非空单元格
- cells.end(xlup) 3 等同于按 end+向上箭,或ctrl+向上箭,往上偏移1,且找到最上的非空单元格
- cells.end(xldown) 4 等同于按 end+向下箭,或ctrl+向下箭,往下偏移1,且找到最下的非空单元格
很多人喜欢用的经典用法,但很少人知道原理,下面有详细的分析
- range("c65535").end(xlup).row 是得出C列的最后一个元素的行号
代码1:选择单元格是 range中间的某个,如 cells(2,4)--考虑偏移验证是对的
Sub jackma11()Debug.Print Cells(2, 4).End(xlToLeft).Column
Debug.Print Cells(2, 4).End(xlToRight).ColumnDebug.Print Cells(2, 4).End(xlUp).Row
Debug.Print Cells(2, 4).End(xlDown).RowEnd Sub
代码2:选择单元格是 range边缘的,如最后1行的cells(3,5)--考虑偏移验证是对的
Sub jackma11()Debug.Print Cells(3, 5).End(xlToLeft).Column
Debug.Print Cells(3, 5).End(xlToRight).ColumnDebug.Print Cells(3, 5).End(xlUp).Row
Debug.Print Cells(3, 5).End(xlDown).RowEnd Sub
代码3:选择单元格是 range边缘的,如第1列的 cells(1,3)--考虑偏移验证是对的
Sub jackma11()Debug.Print Cells(1, 3).End(xlToLeft).Column
Debug.Print Cells(1, 3).End(xlToRight).ColumnDebug.Print Cells(1, 3).End(xlUp).Row
Debug.Print Cells(1, 3).End(xlDown).RowEnd Sub
代码4:选择单元格是 range边缘的,如第1列的 cells(3,3)--考虑偏移验证是对的
Sub jackma11()Debug.Print Cells(3, 3).End(xlToLeft).Column
Debug.Print Cells(3, 3).End(xlToRight).ColumnDebug.Print Cells(3, 3).End(xlUp).Row
Debug.Print Cells(3, 3).End(xlDown).RowEnd Sub
2 经典用法
2.1 Range("c65536").End(xlUp).Row
- 假设数据肯定填不满,所以 c65526是C列的最后一个元素,往上查空的区域,就能找到最后一个非空的C列的最后1个元素
- [A65536].End(xlUp).row 中[A65536]是什么意思?
- 在1995-2006年,excel工作簿包含65536行。
- 但现在的office 2007中工作簿包含1048576行。[A65536]就是A列的最后一行的意思
- 这段话的意思就是,从A列最后一行向上找,找到有数据的行为止。
Sub jackma11()Debug.Print Range("c65536").End(3).RowEnd Sub
- [a65536].End(3)(1, 2) 表示a列,最后1个非空元素,(偏移)右边1格的元素
- [a65536].End(3)(2, 1) 表示a列,最后1个非空元素,(偏移)下面1格的元素
3 如何正确的取range的 边界?最小最大行列数
range("") 做位移,以及end()时,都是以左上角单元格cells()
range("")=cells("左上角")
原始数据
(1,3) | 1:00 AM | 1A | |||
2 B | (2,4) | 2 B | |||
(3,3) | 3 C | (3,5) | |||
取最大行列数总结
- range() =cells(左上角) (只是部分功能上,不是全部!)
- 所以区域内,有部分为空的话,找的 最大行,列等,可能位于range内部!!!!!!!因为是左上角为基准移动的
- 一个range区域,做位移() 时,等同于 cells(左上角) 做位移
- 一个range区域, range(0.end(),等同于 cells(左上角).end()
- 取自己区域的 最大列数,最大行数,直接可用 end(xltoright) end(xldown)
- 其实本身 end(xltoright) 也是从右边一格开始找起的!
- 取自己区域的 最小列数,先平移到左边一格! range()(0,1),然后再取最右边 range()(0,1).end(xltoright)
- 最大行数,先平移到上面1格 ! range()(1,0),然后再取最下的非空单元格 range()(0,1).end(xldown)
Sub jackma101()'这样取的边界是不对的
Debug.Print Range("c7:e9").End(1).Column
Debug.Print Range("c7:e9").End(2).Column
Debug.Print Range("c7:e9").End(xlUp).Row
Debug.Print Range("c7:e9").End(xlDown).Row
Debug.Print ""'这样也不是取的 range的正确边界
Debug.Print Range("c7:e9")(1, -1).End(1).Column
Debug.Print Range("c7:e9").End(2).Column
Debug.Print Range("c7:e9")(-1, 1).End(xlUp).Row
Debug.Print Range("c7:e9").End(xlDown).Row
Debug.Print ""'range的偏移,其实就是左上角单元格cell的偏移
'(1,1) 不偏移,(2,1)往下偏移1格,(0,1)往上偏移1格,(-1,1)往上偏移2格
'(1,1) 不偏移,(1,2)往右偏移1格,(1,0)往左 偏移1格,(1,-1)往上偏移2格
Debug.Print Range("c7:e9")(0, 1).Row
Debug.Print Range("c7:e9")(0, 1).Column
Debug.Print Range("c7:e9")(1, 0).Row
Debug.Print Range("c7:e9")(1, 0).Column
Debug.Print ""'这样才是取的 range的正确边界,都用xltoright 和 xldown
Debug.Print Range("c7:e9")(1, 0).End(xlToRight).Column
Debug.Print Range("c7:e9").End(xlToRight).Column
Debug.Print Range("c7:e9")(0, 1).End(xlDown).Row
Debug.Print Range("c7:e9").End(xlDown).Row
Debug.Print ""End Sub
VBA每日一练(10)range.end() 或 cells().end() 用法,偏移 且 查找非空单元格,取最大最小行列数相关推荐
- VBA每日一练(18),数组array的用法 redim preserve等
定义方式 dim arr11 (5) dim arr12 (0 to 5 ) dim arr13 (1 to 5) dim arr21(1,5) dim arr22(0 to 1 ,0 to 5 ...
- 删除单元格_VBA(实验1)用VBA 删除某列空单元格的3种方法:删除法,转移到其他列方法,数组方法...
1 要解决的问题:删除某列中的空单元格/空行 暂时只实现了删除一列中的空行,并没有实现多行的判断空行和删除方法.----之后再做更复杂的 1.1 需求分析 用VBA删除如下内容,解决思路都不同 删除1 ...
- find vba 模糊_EXCEL——VBA实现模糊查找并获取查找到的单元格内容
image 大家有没有遇到过这种情况,要在一张数据很多的sheet中进行查找匹配一个数据或多个数据(部分匹配),并对查找到的单元格内容进行汇总.这个时候如果对多个数据一个个在目标sheet中ctrl ...
- 【VBA研究】再论取EXCEL有效行列数方法
作者:iamlaosong 1.我有一个工具,Excel2003格式,因处理数据超过65536条,所以让用户另存为xlsm格式,结果用不了,仔细检查发现问题出在取EXCEL有效行数语句上,该语句如下: ...
- VBA每日一练(4),补充VBA的基础语句知识,基本控制结构,I/O基础
一 编程的基础知识 1.1 编程基础知识 程序的构成 程序的构成(表面):很多语句 程序的构成(本质):数据,代码 程序的构成(过程构成)---I/O:输入 input,数据处理,输出 output ...
- 利用VBA代码解决Excel下拉菜单跳过空单元格的问题
一.问题描述 利用Excel制作下拉菜单,当某一列有空白单元格时,如下图所示 在下拉菜单中,也会存在空白单元格 常规制作下拉菜单的方法没有办法避免该问题,所以需要利用VBA解决这个问题 二.解决方法 ...
- Excel·VBA单元格区域获取指定行列函数
office 365新增函数<CHOOSEROWS 函数>和<CHOOSECOLS 函数>可以获取单元格区域指定行.列,并返回一个单元格区域 对于没有office 365又想使 ...
- VBA每日一练(24)在VBA里,3种方法,使用fso 如何统计 某种后缀名类型的文件数量
fso统计文件数量 fso统计文件数量,如果不区分文件类型,可以非常方便 fso.getfolder().files.count 但是fso统计某种类型的文件数量,需要遍历才行 可以用 for ea ...
- VBA每日一练(22),VBA 的 scripting 类库 (scrrun.dll) 和 fso 详细学习
1 scripting类库 (scrrun.dll) Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO. 这个介绍的挺好 https://www. ...
- DNS与服务器搭建-Linux每日一练(10)
今天的文章有点长,因为DNS三两句话说不完,容我慢慢道来. DNS(Domain Name System)域名系统,也就是把某个网址解析成 ip 的服务,对于私有云的方案,有可能会自建 DNS 服务器 ...
最新文章
- 【转】Silverlight 3 Beta 新特性解析(7)- Child Window和Shader Effect篇
- 第八届国际BCI会议(2021 Virtual BCI meeting)
- 逆向工程 sql_mybatis逆向生成工具,真的很好用!
- 2014第3周四杂记
- 远程桌面——TeamViewer中“显示黑屏”的功能框无法使用
- 震惊!腾讯要建AI鹅厂,百度让狗刷脸购物,锤子R-1真机披露
- Linux系统p4vasp使用教程,[分享]一个详细的p4vasp安装指南 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
- 手机端通讯录制作,字母索引查找
- CRNN论文阅读笔记
- make 与makefile(会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。)...
- 如何批量从多个 Word 文档中提取图片
- 解决Spring文件下载时文件损毁问题
- 为Windows Live Writer写一个简单的插件
- java batter_android电池管理系统从上层的java到底层驱动的调用(转载)
- 朋友圈大数据:你的朋友圈出卖了你,大数据就是这么给力!!!
- 传感器的动态和静态特性
- linux编辑文本到最后一行,linux编辑文本(vim)时跳转到最后一行和第一行及相关指令...
- 深度学习在恶意代码检测方面的应用简单调研
- 浏览器地址栏javascript
- linux下配置ipmi ip,Linux下使用命令行配置IPMI
热门文章
- 【JWPlayer】官方JWPlayer去水印步骤
- 如何获取QQ邮箱授权码
- 【MySQL 8.0】导入 .frm .MYD .MYI
- win10计算机管理员的权限才能删除,Win10文件夹删除不了需要管理员权限怎么办?Win10文件夹删除不了需要管理员权限的解决方法...
- pulseaudio 播放卡顿的解决方法
- Gerrit 安装lfs插件
- 【程序员如何买基金 十二】实战操作篇
- 如何在电脑上开启2个微信(如何进行应用分身)
- 微软文字转语音免费下载
- 李宏毅2020机器学习深度学习(完整版)国语课程PPT