• 系统环境:Windows 10
  • Excel:2010版本


今天讲讲常用的单元格定位函数



Part 1:背景介绍

日常工作中,工作表存放数据的最大行列可能不固定,或者无法知道需要操作的单元格的绝对位置,但是知道其相对位置,当然可以使用循环去寻找,但效率偏低。循环与以下三个函数结合效果更好

  • Offset:平移
  • resize单元格范围选取
  • end:定位最后一个



Part 2:Offset

  • offset(行相对位置, 列相对位置)
  1. 同行为0,向下为正,向上为负
  2. 同列为0,向左为负,向右为正

Sub test() Rem>>定义工作表 Set sht = ThisWorkbook.Worksheets("举例") sht.Cells(1, 1) = "起点位置" sht.Cells(1, 1).Offset(1, 2) = "相对位置" End Sub

图1 Offset示例

注意:Rem表示注释。示例中A1为起始位置,行向下1格,列向右2格,则结果在C2



Part 3:Resize

  • resize(行数, 列数)
    1. 构成一个数组或者一个单元格区域
    2. 适用于特定区域整体复制
    3. 被复制区域与复制区域大小应一致
    4. 被复制区域resize后需增加.Value

Sub test() Rem>>定义工作表 Set sht = ThisWorkbook.Worksheets("举例") sht.Range("B7").Resize(1, 3) = sht.Range("B5").Resize(1, 3).Value End Sub


图2 Resize示例




Part 4:End

  • end(特定参数)
  1. 特定参数为:xlUp,xlToLeft,xlDown,xlToRight
  2. xlUp:从下往上,第一个有数据的单元格
  3. xlToLeft:从右往左,第一个有数据的单元格
  4. 上下无To,左右有To

Sub test() Rem>>定义工作表 Set sht = ThisWorkbook.Worksheets("举例") MaxHang = sht.Cells(Rows.Count, "A").End(xlUp).Row MaxLie = sht.Cells(5, Columns.Count).End(xlToLeft).Column Debug.Print ("MaxHang=" & MaxHang) Debug.Print ("MaxLie=" & MaxLie) End Sub



图3 end

通过End方法可以快速定位当前某列写有信息的最大行,对缩小循环次数有很大帮助,提升代码执行效率



以上,为本次的介绍内容,下回见。

本文首发于微信公众号:Excel高效办公之VBA。排版和细节略作修改,发于头条