天涯论坛

 找回密码
 立即注册
搜索
查看: 9|回复: 1

Excel教程:实用的VBA代码,赶紧保藏!

[复制链接]

2973

主题

412

回帖

9117万

积分

论坛元老

Rank: 8Rank: 8

积分
91179187
发表于 2024-10-1 19:22:23 | 显示全部楼层 |阅读模式
回复[目录]学习113篇Excel教程

全套Excel视频教程,扫码观看!

编按: 

哈喽,大众好!昨天和大众承诺,“在看”数超过30,博主明天就继续爆肝更新VBA!感谢大众的支持,没想到昨天的文案“在看”数已然快100了!既然如此,那博主自然不可辜负大众的信任,今天咱们继续学习VBA!

【前言】

在上一篇文章中,作者E图表述给大众分享了关于RANGE对象引用的办法经过回馈的信息来看,和作者想的同样——确实有非常多朋友晓得并且想学习EXCEL VBA知识。

那就让咱们继续上次的内容,依然来讲RANGE。朋友们会问,为何还是RANGE呢?由于在EXCEL中,只要是数据处理的问题,最后都会归结为单元格的引用和操作。即便是操作其他的对象,最后会将内存中计算提取的数据结果,赋值到单元格中来,因此基本永远是基本,根基稳了,高级操作才可压的住。

1

单元格的偏移

在工作表函数中,有一个OFFSET函数,作者E图表述之前专门写过它的文案月薪上万必学10大excel函数之十:它身负5大绝技,是动态统计之王》,不熟练这个函数的朋友能够瞧瞧由于倘若朋友们理解了这个函数的原理,那样对下面的两个RANGE属性,将有很大的帮忙

温馨提示:加入下面QQ群:1043683754,下载教程配套的课件练习操作。

1.RANGE.OFFSET属性

大众能够看出OFFSET的写法都是同样的,在工作表函数中,OFFSET函数是既有偏移的功能,有指定引用范围是几行几列的功能。可是在VBA中RANGE.OFFSET属性仅有偏移的功效。如下代码:

Sub 求和() Dim rg As Range Set rg = Range("C2")rg.Value = rg.Offset(0, -2) + rg.Offset(0, -1)End Sub

【代码解析】:

Line1定义rg为单元格变量;

Line2将单元格位置C2赋值给rg变量;

Line3rg向左偏移两个位置的单元格+rg向左偏移一个位置的单元格,最后将计算结果赋值给rg变量。

经过上面的代码解析,咱们能够看出OFFSET属性的功效,其含义便是按照基点单元格,根据参数进行偏移,以偏移后的位置做为新的基点。

2.RANGE.RESIZE属性

针对一个基点的位置,咱们能够运用VBA来选取引用区域的面积有多大,这儿就需要运用RANGE.RESIZE属性了,如下代码:

Sub 统计()Range("B5") = Application.WorksheetFunction.Sum(Range("B2").Resize(1, 3)) Range("B6") = Application.WorksheetFunction.Average(Range("B2").Resize(1, 3))Range("B7") = Application.WorksheetFunction.Max(Range("B2").Resize(1, 3)) Range("B8") = Application.WorksheetFunction.Min(Range("B2").Resize(1, 3))End Sub

【代码解析】:

Line1调用工作表函数SUM,对基于单元格位置B2起始的1行3列的区域进行求和运算,并将结果赋值给单元格B5;

Line2调用工作表函数AVERAGE,原理同Line1,对该区域进行平均值运算,并将结果赋值给单元格B6;

Line3调用工作表函数MAX,原理同Line1,对该区域进行最大值运算,并将结果赋值给单元格B7;

Line4调用工作表函数MIN,原理同Line1,对该区域进行最小值运算,并将结果赋值给单元格B8;

尤其提示

Application.WorksheetFunction这句代码便是调用工作表函数的语句,后面接写工作表函数,与平常运用函数的办法同样,只需记得单元格对象的表达方式,写成RANGECELLS就可。这个语句咱们在前一篇文案花了6小时,仅为你写出一篇能够学懂的VBA教程!》说到过。

经过上面的代码解析,咱们能够看出RESIZE属性的功效,其含义便是按照基点单元格,根据参数进行扩展,以扩展后的区域做为新的操作对象。

小结

RANGE的OFFSET属性和RESIZE属性的结合,和工作表函数OFFSET的功能是同样的,这在以后咱们讲到数组、字典时,都会有非常多的应用,期盼朋友们能够在文案中有所把握

2

“首行、首列”与“末行、末列”

在本小节中,作者E图表述将带领大众一块学习在运用EXCEL VBA过程中最频繁的语句之一,“查询数据源的起末范围,以及引出行列号”。

在之前的学习中,咱们已然说过,单元格的操作将是朋友们日后运用EXCEL VBA中操作最多的对象(之一),因此针对引用一个单元格区域,晓得这个区域的起末范围,针对快速写出对应的引用表达式是非常关键的。例如下面的数据源:

这般的一个数据源,有几行几列呢?很简单,数一数,15行8列。然则电脑不会像咱们这般“数”,计算机的任何操作都是基于人工赋予的指令。因此它需要咱们写出EXCEL能够识别的语言,才可执行和咱们同样“数”的过程。

1.RANGE.END属性

咱们晓得一个小技巧,便是在一个工作表数据源范围内,选中某一个单元格,分别按:

CTRL+←,能找到连续区域的左边界;

CTRL+→,能找到连续区域的右边界;

CTRL+↑,能找到连续区域的上边界;

CTRL+↓,能找到连续区域的下边界。

在VBA中有一样效果的语句,便是RANGE.END属性,对应的规律是相当的易懂易记,不信你看下表:

照片有误end3暗示↑,end4暗示↓。举个例子看一下,数据源如下:

为了更好地说明代码的应用,作者E图表述去掉了行号和列号的标题栏,用VBA来确定这个行列的起止范围,代码如下:

Sub 末行末列() With Sheets("范围确认") a = .Range("A100000").End(xlUp).Row b = .Range("AX1").End(1).Column .Cells(a + 2, b - 1) = "末行号是:" & a.Cells(a + 3, b - 1) = "末列号是:" & b End WithEnd Sub

【代码解析】:

Line1WITH语句,提取代码中相同的父级对象(Sheets("范围确认")),做为公共从属关系;

Line2以A100000单元格为基点,End(xlUp)向上取连续区域的边界,用Row属性表示此边界单元格的行号,并赋值给变量a;

Line3以AX1单元格为基点,End(1)向左取连续区域的边界,用Column属性表示此边界单元格的列号,并赋值给变量b;

Line4Cells(a+2,b-1),咱们上次已然说过怎样用CELLS表达单元格位置那样把末行下移两行,末列左移一列,做为输入单元格,输入字符串,这儿的&和工作表中的&是一样的效果;

Line5原理同Line4;

Line6WITH语句的结束语句。

这段代码中只写出了End(xlUp)和End(xlLeft)的用法,大众能够尝试着写写其他的效果。

小思考

1.为何我的单元格基点,用了“A100000”和“AX1”?

2.为何网上有的代码会用A65000这个单元格行号?

3.倘若要找到首行首列,是不是从末行再End(xlUp)便是首行,从数据中部的某个单元格End(xlUp)是首行;首列同理?

倘若你还思路,就想想CTRL+箭头,你是从哪个单元格做为基点的。

3

单元格的“行”和“列”

行列交叉,整齐有序,纵横间便是咱们的电子表格,那样“既要纵横,岂能不谈行列”。

经过上面的代码,咱们应该已然发掘RANGE.ROW和RANGE.COLUMN两个属性,分别是表率指定单元格的“行号”和“列号”,这个记起来应该不难,毕竟在工作表函数中,有ROW函数和COLUMN函数。

朋友们可能会说,工作表函数中有ROWS和COLUMNS函数,机智如你,是的,VBA中有 RANGE.ROWS和RANGE.COLUMNS属性。那样结合这些属性,咱们一块举一个案例看一下:

【Step1】:新建一个工作表,命名为“RC属性”;

【Step2】:在工程窗口中,双击“RC属性”工作表对象,在通用菜单栏中选取Worksheet;

【Step3】:在右边的菜单栏中选取SelectionChange事件(选择改变时,触发代码);

【Step4】:输入代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row <= 10 And Target.Column = 1 Thena = Target.Row Range(Cells(1, 3), Cells(a, 3 + a - 1)).Select Set Rng = Selection.Rows MsgBox Rng.Address End IfEnd Sub

【代码解析】:

Line1判断当被选中对象的行号少于等于10,并且列号等于1的时候;

Line2将被选中的单元格行号赋值给一个变量a;

Line3运用Range(cells,cells)的表达式,构建一个按照备选单元格行号,列出的单元格区域。例如选取第3行,就构建以C1单元格为左上角的3*3单元格矩阵,并且选中这个区域;

Line4运用ROWS属性,将SELECTION(被选中的单元格)中触及的单元格赋值给Rng变量;

Line5运用MSGBOX函数,表示Rng.ADDRESS(位置)属性信息框。

【编后语】

今天的信息量又是不少(我从来不写单一的内容),每日进步一点点,忘了就回来再瞧瞧,持之以恒的前提下,更应该明白“天道酬勤”的道理。“多看、多练、多总结”永远是成功者的不二法门。

扫二维码免费学Excel等视频

Excel教程关联举荐

花了6小时,仅为你写出一篇能够学懂的VBA教程!Excel教程:19秒,搞定16000行Excel数据自动分组编号!再见Ctrl+C!提取1000个文件名,用它10秒都嫌多!【Excel教程】

让工作提速百倍的「Excel极速贯通班」

↓ 点击阅读原文,可直接购买。

倘若对你有帮忙,点下“在看”呦





上一篇:Excel常用教程——表格的求和与求差
下一篇:Excel技巧, 一级,二级联动下拉菜单,1分钟学会!
回复

使用道具 举报

3123

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108625
发表于 2024-10-18 20:14:47 | 显示全部楼层
回顾历史,我们感慨万千;放眼未来,我们信心百倍。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 22:59 , Processed in 0.112642 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.