首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VBA之单元格对象

等你点KeepLearn关注都等出蜘蛛网了

这是我VBA分享的第三篇,前两篇我们讲了:

在哪里编辑VBA,对象是什么,工作簿对象

数据类型,常量和变量

Excel VBA基础 & 工作簿的操作

前方碎碎念

周内的时候,边玩着农药边思考这周末应该更新啥,如果先介绍了循环和分支语句,就把所谓的能表达所有计算机程序逻辑顺序分支循环语句都讲完了,听过去有没有觉得自己突然牛逼了好多?要不就是接着讲对象,这是我这种低段位的人说起EXCEL自动化要懂什么,第一个跳到脑子里的就是Range啊。实在是很难抉择啊,直到我不小心有一天看到了日历......

眼瞅着原来下周三就是情人节!想来不论是天天喂我狗粮的小情侣们大情侣们老情侣们还是自我选择或者沦落成为单身狗的童鞋们,都对对象这个词有了更加更加深刻的体会。那我们还是接着讲对象!下次推送我们再讲分支or循环(如果还有下次,我最近好懒)

神马?你说你不知道对象是什么玩意?那是你没有看我的第一篇VBA相关推送,请回头看前文。你说你没有对象?那你随便开个OFFICE应用程序,系统内置成百上千的对象,你随便使唤。

玩笑话就说到这,敲黑板,我们这里在用5秒钟时间快速复习下:

对象是你在程序中需要操作和控制的东西,可能是工作簿(第一篇分享介绍过了),工作表和单元格(区域)。而对象一旦存在,你就可以通过设置其属性和调用其方法来进行操控。

而常常使用EXCEL的小伙伴,想来心里都明镜似的你最常操作的对象就是单元格。毕竟没几个人没事天天新建保存删除工作簿或者天天把工作表名字改来改去或者没事移工作表玩。

在开始下面正式内容之前,我先说一个非常非常非常重要的编程习惯:

在编程中请使用半角的英文符号!!!

在编程中请使用半角的英文符号!!!

在编程中请使用半角的英文符号!!!

重要的话说三遍。

比如,逗号:英文逗号(,)和中文(,);冒号:英文冒号(:)和中文冒号(:);还有方括号圆括号和点,等等等等。

一、方括号 [ ] 引用单元格对象

这是一个最最最简单且最最最方便的引用方式,输入简便性突破天际,没办法更简单了。但是它不支持循环(还没讲到,先记着吧),这是一个非常大的硬伤。

以下是单元格引用举例,大家举一反三:

[A1] —— 表示引用单元格A1

[A1:A3] —— 表示引用A1到A3单元格

[2:2] —— 表示引用第二行

[2:3] —— 表示引用第二行到第三行

[C:C] —— 表示引用C列

同时,大家还可以组合:

[单元格(区域)1, 单元格(区域)2, 单元格(区域)3,...] ——表示选中每个列出来的单元格(区域)

举个例子:

[A1, 2:2, C:C] 表示的区域就是这样的:

截图有限。可以看出A1单元格被选中了,还有第二行和C列,同时第二行和C列的相交单元格是被选中了两次。

这里说一个自己测试的方法,单元格对象有个方法叫做select。大家都可以用你写的区域之后.select来测试你写的区域是什么样子的。

最简单的一段测试小代码:

Sub Test()

[A1,2:2,C:C].Select

End Sub

运行这段测试代码,得到的就是上面图片的结果

小总结

用左右方框号 [ ] 可以引用某个单元格,某个单元格区域,某行,某列,还可以通过在方括号内逗号隔开同时引用多个单元格/区域/行/列。

二、Cells引用单元格

Cells是一个可以引用一个单元格的方式。不和Range配合(Range在下面的第三点介绍)使用的时候有两种方法来引用单元格。

01

Cells(横坐标, 纵坐标)

这感觉不用举例子都可以明白的样子。

Cells(1,3) —— 表示第一行第三列单元格,也就是C1

Cells(3,1) —— 表示第三行第一列单元格,也就是A3

此方式只能引用一个单元格

02

Cells (行号, 列号)

此方法同样只能引用一个单元格,举例:

Cells(1,"C") —— 表示引用单元格C1

Cells(3, "A") —— 表示引用A3单元格

其中列标的字母是必须加上双引号的,而行号用不用双引号系统都可以识别。

请大家在码代码的时候严格按照语法来,不要太具有创新意识,程序跟不上你的节奏。

比如我们大家平常一般说A3单元格吧,但是不论是Cells("A3")还是Cells("A",3)程序都只会甩你一个白(Bao)眼(Cuo)。

思考

思考一下,我们前面的方括号格式除了引用单元格,还可以引用区域,看过去比Cells好用很多啊,为啥我们不都用方括号,要搞个Cells的方式i出来?

03

Cells中使用表达式和变量

如果你和上面思考的问题想一块去了,说明你学习的时候不光是随便看看,还带了脑子是来学习的。至于为什么,是因为Cells中可以使用表达式和变量。

Cells后面不论跟的是横坐标,列坐标,行号还是列标,这些参数都可以包括表达式,也用变量来代替。

比如:

使用表达式:Cells(1,3+2) 相当于Cells(1,5)

使用变量:Cells(i, j) ( i 和 j 都为变量)

两个组合:Cells(i, j+3)

因为可以使用表达式和变量,所以这个写法很容易也很方便地可以用在其他判断,循环语句中。尤其是循环语句。埋个伏笔,下次分享你们就会懂啦。

小总结

Cells的方式可以引用单个单元格,并且该方式可以使用表达式和变量,能更好的和循环语句(尤其是列循环)分支语句等进行结合更好的达到我们的目的。

三、Range对象

Range是最最最最最最大的杀器!如果有人说我会EXCEL VBA但是不知道Range是啥,他一定是个骗纸!

01

引用一个单元格

Range在引用单个单元格的时候非常的符合我们平常对单元格的说法。比如A3单元格,那么就是Range("A3")

重要的事情要说第四遍了!注意都是英文符号。

02

引用一个区域

Range("A1:B3") —— 引用A1到B3单元格

Range("A:B") —— 引用A列和B列

Range ("1:2") —— 引用一到二行

03

引用几个区域

Range("A2:C2,B1:B3") —— 表示引用A2到C2,B1到B3的五个单元格,其中B2被选取了两次

Range(“A2:C2 B1:B3”) —— 表示引用B2单元格

Range("A2:C2","B1:B3") —— 表示引用A1到C3一共9个单元格

是不是有点懵,我写的都是A2:C2,B1:B3啊。怎么出来的结果都不一样??这是因为你用的符号不一样,所以再次强调语法很重要,不要太自我创作。

第一种写法,选中单元格区域

第二种写法,选中多个单元格区域相交的部分

第三种写法,选中能包住两个区域的最小矩形区域

在刚开始,我们其实不会用到多区域的引用。这里只是简单介绍一些,并且让大家明白随便加个逗号,效果就会非常非常不一样。 编程一定要仔细,不然就应了那句玩笑话了:写了一天BUG,肯定很累吧?

04

Range嵌套使用

此外,作为一个大杀器,我们还有一种用法是Range(Cell1, Cell2)

其中Cell1用来指定区域左上角的单元格,Cell2用来指定区域右下角单元格。

Cell1和Cell2可以用上面的任何一种,方括号,Cells或者Range来写。这我就不再举例子啦。

这里我其实也没有穷尽Range的写法,还有Range.Cells的两种用法,其实平常不太会用到。初级阶段更不需要记忆那么多东西了。我们这里就不说了,有兴趣的看文的童鞋们自己去百度好了。

05

Range中使用表达式和变量

这两点Range也是妥妥的哦。但是因为Range除了Range(Cell1,Cell2)的方式以外,列都是通过列标(ABCDEFG)而不是数字来表达的,所以在循环语句中,若想对列进行循环,方便性远不如Cells引用来的方便。

另外,Range的变量使用并不是简单的Range("Ai")这种方式,因为双引号之间的某认是字符串,需要通过&来连接各个部分,所以要写为Range("A" & i)这样。

那么如果是选择一个区域呢,区域的左上角和右下角的行号都需要是变量咋办?那么就是Range("A" & i & ":C" & j) 看起来有复杂吧?

小总结

Range是个强大的单元格区域引用的大杀器。所以这一部分,没弄明白的同学要多看几遍哦。

四、小例子

好啦,老规矩,我们讲完了单元格,来一点点小小的例子看看我们今天学到的东西如何用到一个程序里。今天多说两句,码代码初期阶段,我们不考虑效率问题,让一个代码能跑起来不出错这个事情,其实和搭积木没有什么区别的。我每次的例子都在上次的例子上抽掉了一些部分,然后搭了一点这篇文说的部分,其实不就是在搭积木么?

第一次分享,我们是新建了三个工作簿,存到了桌面,分别命名为北京上海和深圳。

第二次分享,我们把重复出现的桌面地址用MyPath的变量代替,避免多次输入错误,也对今后试图浏览/修改这段代码的人友好一些。

那么这次我们做啥呢?我稍微在我的原来空白的工作簿(KeepLearn.xlsm)的唯一的工作表上放上了这些东西,并且把这唯一的工作表改名成为Asset:

好啦。做财务的一看就明白啦,这是一份资产表。在N节课后,我们慢慢搭积木的结果就是,我们会把这张表,自己拆成每个仓库一张表,存到桌面上,或者如果我接着写下去,拆完表之后自动发邮件给到了每个仓库的负责人。这是一个非常非常实在的日常工作中很可能会碰到的案例,希望能给你们一些学习的动力吧。

由于还没有学循环语句,我们现在假设我知道我要存的表的名字B2单元格内容“北京”,B13单元格内容"上海"和B21单元格内容"深圳"。代码就可以改成这样:

这里我们添加的东西包括了:

定义了一个新的工作表对象AssetList,为了避免后面在引用单元格需要指定表格时候重复三次这么长的一串东西。

原来的北京,上海,深圳的名字,被单元格的值分别通过今天所分享的三种方式去取代了。

五、最后的最后

马上要过年啦,大家的问候语都从周末愉快变成了,啥时候回家啊,下周不来了啊,新年快乐,明年见哦。接着不可避免的是整个人就变懒了,天天就想瘫着,比如我这个周的工作日每天晚上只干了一件事情就是开黑打农药。人要是能长期保持一种奋斗的斗志真的是一件很困难的事情呢,所以清楚知道自己是个普通人,原谅自己是不是的懈怠和自己和解也是一件非常非常重要的事情。

说了那么多,意思就是我可能随时会断更,23333。不过我本来也就没有承诺说要一直写下去嘛。

没准会断更很久啊,所以在这里先祝大家情人节快乐,春节快乐,新的一年有新收获。

这是一个很随性的公众号,用来分享公号主自己学到的,用到的,听到的,感受到的各种乱七八糟的事情,如果你有兴趣:

1

欢迎随手扫一扫关注公众号

2

分享此文到朋友圈

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210G0TQE500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券