为啥要用VBA?因为我懒啊

2018-07-04 07:01:29 187点赞 2496收藏 75评论

开头先要说明一下,本人非码农,非办公室文职,所以代码和excel应用水平极其低下,有错误的话各位轻喷。。。
本人使用VBA的时间其实非常短,从第一次用到现在貌似也就半年多吧。之前不要说VBA,就算是excel也是一年用不了几次。也正因为excel用得少,使得我对它的各项功能几乎是一无所知,常用的也就是复制、黏贴、搜索、筛选、排序以及求和,什么vlookup、数据透视表,听都没听过,更别说用了。有一次正巧需要分析一个50万条的数据,而且这样数据一天就可能会产生十几份,以我本身那孱弱的excel知识简直就是一个不可能完成的任务,纠结了半天最终还是决定用VBA解决,最后花了两天的时间搞定了这个表格,点击一下按钮数据立马就自动处理完毕,以后再也不用慢慢算了,对我这种懒人再适合不过 ,自此一有想不开就会用VBA来解决。
之前看到有位值友写了一篇怎么用excel抢压寨夫人,我用力学了学,没学会。转念一想,定位这个功能还是挺常用的,要是下次遇到类似的问题咋办?还是自己写一个放着以防万一,到时候复制黏贴改一下就可以了。
先来看看效果如何:

为啥要用VBA?因为我懒啊

只要输入想搜索的城市名以及月份,点击按钮,即可直接显示出相对应的数字,是不是感觉很方便?不仅用起来方便,得益于VBA本身的函数,代码量很少,30行不到就可以完成以上操作,如果换成在excel里的操作,就三种,“ctrl+→”、“ctrl+↓”和“ctrl+f”。嗯,就这三个,简单吧~~~下面让我们看看怎么只用这三个操作完成这个定位的。

首先我们要先进入excel设计模式,来添加所需控件,点击开发工具——设计模式——插入,即可选择所需插入的控件,在控件上悬停可看到该控件名称。

为啥要用VBA?因为我懒啊

我在这里用了四个控件,分别是两个文本框,一个按钮以及一个标签。文本框用来输入需要搜索的字条。按钮是主程序所在,点击后即开始搜索。标签是显示结果,当然也可以直接在excel的某个单元格中显示。

为啥要用VBA?因为我懒啊

双击任意控件即可进入代码界面,由于程序运行是基于按钮被点击,所以双击按钮控件进入代码界面,这样就可以直接对按钮点击这个动作进行编程。用过VB6的同学应该很熟悉这个界面。这个界面中有三个窗口,除了代码窗口外,在这个程序中我修改了CommandButton1的caption属性,这个属性其实对应的就是在按钮上显示什么字,在这里我改成了搜索。

为啥要用VBA?因为我懒啊

为啥要用VBA?因为我懒啊

完成了以上操作,接下来就可以写程序了,程序其实和烧菜的菜谱差不多,变量就是各种食材调味料,代码就是烧菜的步骤。

Dim row_count_sht1 As Long
Dim item_info As Range
Dim city_str, clm_max_sht1, mon_adr As String

这三行Dim开头的代码是声明变量。这是什么意思呢?我们可以把long看作是一个大药箱,这里面就只能放药,而不能放其他东西,第三行的string看作是个饭盒,那这里只能放饭菜,差不多就是这个意思。dim后面跟着的那些就是变量的名称,第一行的意思就是有一个叫row_count_sht1的大药箱,变量的名称可以自己定,除了一些特殊字符之外其他都可以用。具体long和string的含义各位可以自己去百度,这个还是很容易理解的。

定义好了需要用的变量,接下来就可以写程序了,也就是怎么烧菜。

clm_max_sht1 =Worksheets("Sheet1").Range("A1").End(xlToRight).Address
这个操作其实就是ctrl+→,在sheet1中找到最右侧有效单元格,并把该单元格的地址放入clm_max_sht1中。

clm_max_sht1 =Mid(clm_max_sht1, 2, 1)
由于取到的地址是$E$1,而我们想要的仅仅是列号E而已,所以我们要用字符串操作函数把中间的E提取出来备用。

row_count_sht1 =Worksheets("Sheet1").Range("A1").End(xlDown).Row
这个操作是ctrl+↓,找到最下面的单元格,但这个比上面要方便的地方在于直接可以获取行号,不需要再用字符串操作来提取数字。

Set item_info =Worksheets("Sheet1").Range("A1:A" &row_count_sht1 & "").Find(What:=TextBox1.Value,After:=Range("A1"), LookIn:=xlFormulas, _

LookAt:=xlWhole,SearchOrder:=xlByColumns, SearchDirection:=xlNext, _

MatchCase:=False, MatchByte:=False,SearchFormat:=False)
这一长串是ctrl+f搜索,意思差不多就是搜索整个A列的有效单元格,寻找与文本框中一致的那个单元格

If item_info IsNothing Then

MsgBox "未找到" &TextBox1.Value
上面两行就是判断语句,如果没找到的话就显示没有找到这个东西

Else
其他情况就执行以下步骤

city_str = item_info.Address
提取出在A列中搜索到的单元格的地址,此处提取到的是$A$4

city_str = Right(city_str, Len(city_str) -3)
将该地址的列号,也就是把4提取出来,这样列方向的搜索就完成了,下面用同样的方式搜索行方向。

Setitem_info = Worksheets("Sheet1").Range("A1:" &clm_max_sht1 & "1").Find(What:=TextBox2.Value,After:=Range("A1"), LookIn:=xlFormulas, _

LookAt:=xlWhole,SearchOrder:=xlByColumns, SearchDirection:=xlNext, _

MatchCase:=False,MatchByte:=False, SearchFormat:=False)

If item_info Is Nothing Then

MsgBox "未找到" &TextBox2.Value

Else

mon_adr = item_info.Address

mon_adr = Mid(mon_adr, 2, 1)
由于行方向我们只要字母,所以我们将行方向搜索到的单元格地址的字母提取出来,这里找到的是C。到这行为止,所有的搜索都已经结束,接下来只要将C4单元格的值填入标签就大功告成了。

Label4.Caption =Worksheets("Sheet1").Range("" & mon_adr &"" & city_str & "").Value
这行就是把之前找到的C和4拼起来,告诉电脑把C4的值放到Label4.Caption中,这样整个程序就完成了。

Worksheets("Sheet1").Range(""& mon_adr & "" & city_str & "").CopyRange("J6")
当然我们也可以不用标签Label4. Caption来显示,而是直接用上面的代码把C4的值复制黏贴到J6单元格或者其他单元格中显示。

End If

End If

以上就是这个程序所有的内容了,是不是很简单很方便?不需要去学习很多的excel使用方法,只要有最基本的excel操作思路,就可以完成繁杂的操作,这样就不用再去记那些函数了,果然懒才是人类进步的原动力啊~~~

不过话说回来,VBA也并不是什么情况都适合,像上面那个程序虽然简单,但也需要大概十几分钟来完成,如果仅仅是偶尔用到某个功能,而且不会花费太多时间的情况下我建议还是手动做做算了,毕竟花十几甚至几十分钟写一个手动几分钟就能完成的东西,怎么看都不符合懒这个标准的说~~~

展开 收起

JINGDONG 京东 健康甄选 超声波洁牙套餐 单人洁牙+抛光

JINGDONG 京东 健康甄选 超声波洁牙套餐 单人洁牙+抛光

89元起

宝满 WPS2019视频教程 表格文字演示word/excel/ppt办公office在线课程

宝满 WPS2019视频教程 表格文字演示word/excel/ppt办公office在线课程

暂无报价

苏曼网校 Word2016 从入门到精通 视频教程

苏曼网校 Word2016 从入门到精通 视频教程

暂无报价

Photoshop cc2018 全套速成 入门视频课程

Photoshop cc2018 全套速成 入门视频课程

暂无报价

Photoshop CC 全套入门 自学视频课程

Photoshop CC 全套入门 自学视频课程

暂无报价

CAD2019 零基础入门到精通 全套视频课程

CAD2019 零基础入门到精通 全套视频课程

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【11.11专享学霸班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【11.11专享学霸班】

暂无报价

PPT office2016 全套 视频课程

PPT office2016 全套 视频课程

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【全额奖学金班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【全额奖学金班】

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【特惠班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【特惠班】

暂无报价

photoshop cc 广告平面设计在线课程

photoshop cc 广告平面设计在线课程

暂无报价

AutoCAD 室内设计 全套基础基础入门 视频课程

AutoCAD 室内设计 全套基础基础入门 视频课程

暂无报价

PS零基础 全套案例 视频课程

PS零基础 全套案例 视频课程

暂无报价

圈外同学 IDP职业发展规划课

圈外同学 IDP职业发展规划课

暂无报价

Photoshop cs6 平面设计零基础入门 自学基础班 视频课程

Photoshop cs6 平面设计零基础入门 自学基础班 视频课程

暂无报价

CAD2019 机械制图 机械设计制图

CAD2019 机械制图 机械设计制图

暂无报价
75评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
2.4K
扫一下,分享更方便,购买更轻松