增加一种数组的方法去取······

  • 二维数组边界
  • 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() 用法,偏移 且 查找非空单元格,取最大最小行列数相关推荐

  1. 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 ...

  2. 删除单元格_VBA(实验1)用VBA 删除某列空单元格的3种方法:删除法,转移到其他列方法,数组方法...

    1 要解决的问题:删除某列中的空单元格/空行 暂时只实现了删除一列中的空行,并没有实现多行的判断空行和删除方法.----之后再做更复杂的 1.1 需求分析 用VBA删除如下内容,解决思路都不同 删除1 ...

  3. find vba 模糊_EXCEL——VBA实现模糊查找并获取查找到的单元格内容

    image 大家有没有遇到过这种情况,要在一张数据很多的sheet中进行查找匹配一个数据或多个数据(部分匹配),并对查找到的单元格内容进行汇总.这个时候如果对多个数据一个个在目标sheet中ctrl ...

  4. 【VBA研究】再论取EXCEL有效行列数方法

    作者:iamlaosong 1.我有一个工具,Excel2003格式,因处理数据超过65536条,所以让用户另存为xlsm格式,结果用不了,仔细检查发现问题出在取EXCEL有效行数语句上,该语句如下: ...

  5. VBA每日一练(4),补充VBA的基础语句知识,基本控制结构,I/O基础

    一 编程的基础知识 1.1 编程基础知识 程序的构成 程序的构成(表面):很多语句 程序的构成(本质):数据,代码 程序的构成(过程构成)---I/O:输入 input,数据处理,输出  output ...

  6. 利用VBA代码解决Excel下拉菜单跳过空单元格的问题

    一.问题描述 利用Excel制作下拉菜单,当某一列有空白单元格时,如下图所示 在下拉菜单中,也会存在空白单元格 常规制作下拉菜单的方法没有办法避免该问题,所以需要利用VBA解决这个问题 二.解决方法 ...

  7. Excel·VBA单元格区域获取指定行列函数

    office 365新增函数<CHOOSEROWS 函数>和<CHOOSECOLS 函数>可以获取单元格区域指定行.列,并返回一个单元格区域 对于没有office 365又想使 ...

  8. VBA每日一练(24)在VBA里,3种方法,使用fso 如何统计 某种后缀名类型的文件数量

    fso统计文件数量 fso统计文件数量,如果不区分文件类型,可以非常方便  fso.getfolder().files.count 但是fso统计某种类型的文件数量,需要遍历才行 可以用 for ea ...

  9. VBA每日一练(22),VBA 的 scripting 类库 (scrrun.dll) 和 fso 详细学习

    1 scripting类库 (scrrun.dll) Scripting类库中有三个可以直接使用NEW关键字实例化的类,第一个就是常用的字典,第三个是FSO. 这个介绍的挺好 https://www. ...

  10. DNS与服务器搭建-Linux每日一练(10)

    今天的文章有点长,因为DNS三两句话说不完,容我慢慢道来. DNS(Domain Name System)域名系统,也就是把某个网址解析成 ip 的服务,对于私有云的方案,有可能会自建 DNS 服务器 ...

最新文章

  1. 【转】Silverlight 3 Beta 新特性解析(7)- Child Window和Shader Effect篇
  2. 第八届国际BCI会议(2021 Virtual BCI meeting)
  3. 逆向工程 sql_mybatis逆向生成工具,真的很好用!
  4. 2014第3周四杂记
  5. 远程桌面——TeamViewer中“显示黑屏”的功能框无法使用
  6. 震惊!腾讯要建AI鹅厂,百度让狗刷脸购物,锤子R-1真机披露
  7. Linux系统p4vasp使用教程,[分享]一个详细的p4vasp安装指南 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  8. 手机端通讯录制作,字母索引查找
  9. CRNN论文阅读笔记
  10. make 与makefile(会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。)...
  11. 如何批量从多个 Word 文档中提取图片
  12. 解决Spring文件下载时文件损毁问题
  13. 为Windows Live Writer写一个简单的插件
  14. java batter_android电池管理系统从上层的java到底层驱动的调用(转载)
  15. 朋友圈大数据:你的朋友圈出卖了你,大数据就是这么给力!!!
  16. 传感器的动态和静态特性
  17. linux编辑文本到最后一行,linux编辑文本(vim)时跳转到最后一行和第一行及相关指令...
  18. 深度学习在恶意代码检测方面的应用简单调研
  19. 浏览器地址栏javascript
  20. linux下配置ipmi ip,Linux下使用命令行配置IPMI

热门文章

  1. 【JWPlayer】官方JWPlayer去水印步骤
  2. 如何获取QQ邮箱授权码
  3. 【MySQL 8.0】导入 .frm .MYD .MYI
  4. win10计算机管理员的权限才能删除,Win10文件夹删除不了需要管理员权限怎么办?Win10文件夹删除不了需要管理员权限的解决方法...
  5. pulseaudio 播放卡顿的解决方法
  6. Gerrit 安装lfs插件
  7. 【程序员如何买基金 十二】实战操作篇
  8. 如何在电脑上开启2个微信(如何进行应用分身)
  9. 微软文字转语音免费下载
  10. 李宏毅2020机器学习深度学习(完整版)国语课程PPT