Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VBA实战技巧01: 在代码中引用动态调整单元格区域的5种方法

VBA实战技巧01: 在代码中引用动态调整单元格区域的5种方法

作者头像
fanjy
发布于 2020-02-12 04:09:47
发布于 2020-02-12 04:09:47
4.9K07
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:7
代码可运行

在VBA代码中,经常要引用单元格数据区域并对其进行操作。然而,如果对数据区域采用“硬编码”地址,那么当该区域大小变化时,必须修改相应的引用该区域的代码。本文整理了可以动态引用数据区域的5种方法,供编写代码时参考。

方法1:使用UsedRange属性

工作表对象的UsedRange属性返回一个Range对象,代表工作表中已使用的单元格区域。代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DynamicRange1()
   '刷新已使用区域
    ActiveSheet.UsedRange
   '选择已使用区域
    ActiveSheet.UsedRange.Select
End Sub

方法2:使用Ctrl+Shift+向右箭头键/向下箭头键

模拟使用快捷键Ctrl+Shift+右箭头,然后使用快捷键Ctrl+Shift+向下箭头来选择单元格区域。注意,如果第一行的最后一个单元格或者第一列的最后一个单元格为空,则本方法不会选择到正确的单元格区域。因此,本方法适用于数据区域的第一列在最后一行有值且第一行在最后一列有值的区域。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DynamicRange2()
    Dim wks As Worksheet
    Dim lngLastRow As Long
    Dim lngLastColumn As Long
    Dim FirstCell As Range
   
   '设置工作表和数据区域起始单元格
    Set wks = Worksheets("Sheet1")
    Set FirstCell = Range("C3")
   
    With wks
        '获取数据区域第一列中有数据的最后一行行号
        lngLastRow = .Cells(.Rows.Count,FirstCell.Column).End(xlUp).Row
        '获取数据区域第一行中有数据的最后一列表号
        lngLastColumn = .Cells(FirstCell.Row,.Columns.Count).End(xlToLeft).Column
        '选择数据区域
        .Range(FirstCell, Cells(lngLastRow,lngLastColumn)).Select
    End With
End Sub

方法3:SpecialCells方法——最后一个单元格

使用SpecialCells方法来查找工作表中包含数据的最后一个单元格。找到后,使用该单元格引用来确定最后的数据行和列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DynamicRange3()
    Dim wks As Worksheet
    Dim lngLastRow As Long
    Dim lngLastColumn As Long
    Dim FirstCell As Range
   
   '设置工作表和起始单元格
    Set wks = Worksheets("Sheet1")
    Set FirstCell = Range("C3")
   
   '刷新已使用单元格区域
    Worksheets("Sheet1").UsedRange
   
   '找到最后一行和列
    With FirstCell.SpecialCells(xlCellTypeLastCell)
        lngLastRow = .Row
        lngLastColumn = .Column
    End With
   
   '选择单元格区域
    wks.Range(FirstCell, wks.Cells(lngLastRow,lngLastColumn)).Select
End Sub

方法4:使用CurrentRegion属性

单元格对象的CurrentRegion属性返回当前单元格所在的数据区域,该区域上下左右都是空行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DynamicRange4()
    Dim wks As Worksheet
    Dim FirstCell As Range
   
   '设置工作表和起始单元格
    Set wks = Worksheets("Sheet1")
    Set FirstCell = Range("C3")
   
   '选择单元格区域
    FirstCell.CurrentRegion.Select
End Sub

方法5:固定列

很多情况下,工作表数据区域的列是固定的,只是随着数据的添加,行数发生变化。此时,可以使用下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DynamicRange5()
    Dim wks As Worksheet
    Dim lngLastRow As Long
    Dim lngLastColumn As Long
    Dim FirstCell As Range
   
   '设置工作表和起始单元格
    Set wks = Worksheets("Sheet1")
    Set FirstCell = Range("C3")
   
   '刷新已使用单元格区域
    Worksheets("Sheet1").UsedRange
   
   '查找最后一行
    lngLastRow = wks.Cells.Find("*",_
        SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious).Row
       
   '选择单元格区域
    wks.Range("C3:E" &lngLastRow).Select
End Sub

上面介绍的方法适用情况稍有不同,你可以根据实际工作表数据来灵活选用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.2K0
啰哩啰嗦地讲透VBA中引用单元格区域的18个有用方法--Cell属性和Offset属性
引言:本文学习整理自powerspreadsheets.com,讲解得很细致,一些知识点反复强调,对于熟悉VBA的朋友来说,感觉有点啰嗦,但是对于VBA初学者来说,对快速掌握Range对象的引用,却很有好处。
fanjy
2022/01/07
4.4K0
啰哩啰嗦地讲透VBA中引用单元格区域的18个有用方法--Cell属性和Offset属性
ExcelVBA End属性查找”最后”的单元格
'等同于按键 (End+向上键、End+向下键、End+向左键、End+向右键),或者CTRL+上下左右
哆哆Excel
2022/10/25
1.7K0
ExcelVBA End属性查找”最后”的单元格
Excel VBA解读(161): 数据结构—字典对象操作示例
在前面的讲解中,我们添加到字典中的元素都是一个键对应着一个值,如果我们想要在字典对应的每个键中存储多个值,该怎样做呢?
fanjy
2019/09/03
2K0
Excel VBA解读(161): 数据结构—字典对象操作示例
VBA专题11:详解UsedRange属性
UsedRange属性是Worksheet对象的一个有用的属性,可以返回工作表中已使用的单元格区域。实际上,根据UsedRange的意思,我们就可以明白,该属性代表工作表中已使用的区域,不仅包括可以看到内容的单元格,而且不包括应用了格式、添加批注或其他一些修改的单元格。我们可以使用UsedRange属性来操控Excel工作表数据。
fanjy
2021/06/01
8.4K0
VBA专题11:详解UsedRange属性
Excel应用实践16:搜索工作表指定列范围中的数据并将其复制到另一个工作表中
“在工作表Sheet1中存储着数据,现在想要在该工作表的第O列至第T列中搜索指定的数据,如果发现,则将该数据所在行复制到工作表Sheet2中。
fanjy
2019/07/19
6.4K0
VBA实战技巧:快速返回最后一次编辑的单元格
在有些情况下,我们可能需要快速返回到最后一次编辑的单元格。例如,最后一次编辑的单元格是单元格K112,然而我的当前单元格在单元格C1,如何定位这个最后编辑的单元格并快速返回到该单元格呢?
fanjy
2022/11/16
9960
VBA实战技巧:快速返回最后一次编辑的单元格
问与答57: 如何实现打开工作簿后自动跳转到当前日期所在列?
Q:在Excel工作表中的第1行的每一列,都是按顺序排列的日期,如何在打开工作簿时自动跳转到当前日期所在的列?如下图1所示,如果今天是2019年4月6日,打开工作簿后自动选择这一列。
fanjy
2019/07/19
1.4K0
问与答57: 如何实现打开工作簿后自动跳转到当前日期所在列?
VBA实战技巧26:使用递归确定所有的引用单元格
在Excel中,经常存在一个单元格引用另一个单元格中,而另一个单元格又引用其他单元格的情形。如何使用VBA代码编程确定指定单元格的所有引用单元格呢?
fanjy
2021/07/12
1.5K0
VBA实战技巧26:使用递归确定所有的引用单元格
啰哩啰嗦地讲透VBA中引用单元格区域的18个有用方法--Range属性
引言:本文学习整理自powerspreadsheets.com,讲解得很细致,一些知识点反复强调,对于熟悉VBA的朋友来说,感觉有点啰嗦,但是对于VBA初学者来说,对快速掌握Range对象的引用,却很有好处。
fanjy
2022/01/07
6.8K0
啰哩啰嗦地讲透VBA中引用单元格区域的18个有用方法--Range属性
问与答70: 如何记录指定单元格每次修改的时间?
Q:我想要在用户修改工作表指定单元格的内容时,在另一工作表中记录修改的时间。例如,在工作表Sheet1的单元格B2中,每次用户将该单元格值修改为某一大于0的数值时,则在工作表LogB2中记录下其修改的时间。
fanjy
2019/11/11
1.8K0
使用VBA设置可以实时更新的打印区域
有时候,工作表中的数据经常发生更新,这样,如果要设置打印区域的话,那么每次更新后都得重新选择并设置,以便将更新的数据包括到打印区域中。
fanjy
2022/11/16
2K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.4K0
Excel VBA编程
VBA小技巧:确定工作表数据区域
在使用VBA编写程序时,有几种常用方法可以在工作表中查找包含已有数据的区域,但这些方法都多少存在一些局限。
fanjy
2022/11/16
1.3K0
VBA汇总文件夹中的多文件的工作表中不同单元格区域到总表
【问题】我们发了这样一个表格到各单位收集资料,各单位填写完后上交上来有许多个文件,我们现在想汇总成一年一个表,怎么办?
哆哆Excel
2022/10/25
2.4K0
VBA汇总文件夹中的多文件的工作表中不同单元格区域到总表
VBA实战技巧12: 仅显示组成SUMIFS函数的结果的数据
下面的这段代码来自于TheSpreadsheetGuru.com,类似数据透视表中的双击功能,可只显示组成SUMIFS函数结果的数据。代码如下:
fanjy
2021/01/06
2.6K0
Excel实战技巧53: 在VBA代码中使用工作表公式更有效地实现查找
在工作表中查找值是很常见的操作,我们可以使用VLOOKUP函数、MATCH函数、INDEX函数等来查找值。当使用VBA代码在大量的数据中进行查找操作时,灵活运用工作表公式,往往能够提高效率。
fanjy
2019/09/19
2.9K0
Excel实战技巧53: 在VBA代码中使用工作表公式更有效地实现查找
VBA专题02:使用代码进行复制操作
在Excel工作表中,复制粘贴是最常用的操作之一。在已经输入的数据中,找到并复制想要的数据,然后粘贴到指定的地方,是再自然不过的操作了。或者从工作表的一个单元格区域复制到同一工作表中另外的单元格区域,或者从工作表的一个单元格区域复制到另一工作表中的单元格区域,甚至从工作表的一个单元格区域复制到不同工作簿中的工作表单元格区域。那么,如何使用VBA代码来实现复制粘贴操作呢?本文将介绍常用的一些代码。
fanjy
2019/07/19
6.8K0
社群答疑精选03:拆分数据到新工作表
这种问题最适合使用VBA来解决。仔细观察后发现,户主对应的人数就是该户家庭在工作表中所占的行数,这样只要定位到户主,就知道了该户所有成员的范围,这就方便提取相应的数据了。VBA代码如下:
fanjy
2020/08/11
5610
社群答疑精选03:拆分数据到新工作表
Excel应用实践22: 比较并合并工作表
有两个工作表,均含有相同的数据,但最后一列名称和产品的数量不同,如下图1和图2所示。
fanjy
2019/10/22
7610
Excel应用实践22: 比较并合并工作表
推荐阅读
相关推荐
EXCEL VBA语句集300
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验