usedrange是工作薄的属性,currentRegion是单元格的属性,这两个属性都是用来定位选择区域的。
两个属性选择的不同点
第1点:UsedRange属性
表示工作表中所有包含数据或格式的单元格组成的矩形区域(即 Excel 认为 “已使用过” 的区域)。定位逻辑:从工作表的第一个非空单元格到最后一个非空单元格(包含中间的空单元格),只要单元格曾输入过数据、设置过格式(如颜色、边框),都会被包含。
Sub row1() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet3") ' 获取工作表的UsedRange Dim usedRng As Range Set usedRng = ws.UsedRange ' 输出区域地址和包含的单元格数量 Debug.Print "UsedRange地址: " & usedRng.Address ' 输出:$A$1:$D$5 Debug.Print "包含单元格数: " & usedRng.Cells.Count ' 输出:20(4列×5行) End Sub第2点:currentRegion的用法
单元格周边的单元格必须有内容,如果没有为断点位置。
Sub TestCurrentRegion() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ' 以A1为起点,获取CurrentRegion Dim currRng As Range Set currRng = ws.Range("A1").CurrentRegion ' 输出区域地址和包含的单元格数量 Debug.Print "CurrentRegion地址: " & currRng.Address ' 输出:$A$1:$C$3 Debug.Print "包含单元格数: " & currRng.Cells.Count ' 输出:9(3列×3行)End Sub第3点:关键区别总结
对比项 | UsedRange | CurrentRegion |
依赖起点 | 不依赖(基于整个工作表) | 依赖(必须指定起点单元格,如Range("A1").CurrentRegion) |
包含内容 | 数据 + 格式(即使孤立存在) | 仅连续数据块(被空行 / 空列包围) |
范围大小 | 通常更大(可能包含大量空单元格) | 更精准(仅包含连续有效数据) |
典型用途 | 备份整个工作表 “已使用” 区域、清除格式 | 处理独立的数据表(如表格、清单) |
对空行 / 空列的处理 | 包含空行 / 空列(只要在 used 范围内) | 遇到空行 / 空列立即停止扩展 |
第4点:注意要点
- UsedRange的注意事项:若删除了单元格数据但保留了格式,UsedRange仍会包含该单元格,可能导致范围偏大;可通过ws.UsedRange.Clear清除所有已使用区域的内容和格式,缩小UsedRange范围。
- CurrentRegion的注意事项:起点单元格必须在数据块内(若起点为空,可能返回单个空单元格);适用于标准数据表(无内部空行 / 空列),若数据中间有空行 / 空列,会提前截断。

