如何学习VBA:3.3.4从初学到精进的方法

B站影视 欧美电影 2025-06-13 02:17 3

摘要:我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。

如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解。这四套教程内容掌握后足以处理一般工作中的问题,实际写代码的时候再辅助代码汉英手册,足矣!如果您想进一步提高,就需要选择高级阶段的教程了。

VBA是面向对象编程的语言,博大精深。很多朋友咨询VBA的学习方法,我会陆续给大家讲解一些我的经验,大家可以慢慢体会。今日的内容是如何学习VBA:3.3.4从初学到精进的方法

【分享成果,随喜正能量】171 说到得失,不管是得是失,都各有因缘。是我的,不必力争,自会得到;不是你的,即使千方百计取得,也会随风而逝。如果你想获得安宁与自由,那么让脚步去追随心的方向。

就VBA的特点而言,一位合格的管理人员,特别是现场管理人员,VBA是必备的知识和技能。一位中级及以上管理工作者,如果你不懂VBA,在某种程度上讲,你是不合格的,因为你没有办法从大量的数据中理顺出自己的思路,并根据自己的思路把数据和产品做有效的连接。你只能接受其他人提供给你的资料,还无法判断数据来源的可靠性。上述观点也是我二十多年来职场生涯的一点体会。

“数据”是管理最基本的参考资料,要从各式各样的数据中提取出自己关注的部分,这是对于管理者必备的基本功,如何提取这些数据,有着各种办法,以我的经验,最为灵活和实用的要首选“VBA”。很多年轻人,步入职场,如果不想混日子,如果想在自己的事业上有所突破,VBA确实是能尽快提高自己能力的一种有效的手段,其中的道理不再多说,你懂得。

“VBA代码解决方案”系列资料结集以来,和大量的朋友进行了交流,很多人都在说“我是新手,如何学习VBA”,其实每个人都有新手的经历,在我的教程中我会把我学习VBA的历程与大家分享,把好的经验提供给大家。

我初学VBA时,基本上还没有像样的书籍可以参考。能看到的只是前辈留下的代码,其中一个是复杂实例,可以实现上万种商品从库存到订单的匹配。那时,看着各种表格飞速地运转,我总是去琢磨:驱动运算的后台是什么样子呢?再后来,看的多了,用的多了,自己也就窥视了其中的奥秘。这位前辈现在已经做到了东软的副总,是非常成功的人士。当然个人事业的发展和多种因素有关系,我们只谈VBA。

对于初学者,我提到过要弄懂每一块积木。我的每一讲可以单独地解决一类问题,在讲解中我也尽可能地深入,把需要的知识点讲透彻,这给初学者带来了很大的方便。记得我在学习初期的时候为了弄懂with的含义,就花费了很大的气力。所以为了避免朋友们如我初学时的困惑,我在每一讲的讲解时会照顾到方方面面。我在创作这系列的文章时定位的是广大职场人员,让这类人受益。要注意,在学习时要结合实际问题,动手去解决。在“VBA代码解决方案”一书的实例中,很多是工作中经常遇到的例子,我特意写出来给大家参考。可以结合自己感兴趣的章节先弄懂代码的含义,然后再扩展其他的章节。要循序渐进,不可贪多。每个知识点都是要理解。学以致用,希望大家能有所结合的去学习,学习的目的是应用,不要为学习而学习。

下面我就一个实例给大家分析:查找是我们工作中经常用到的,但用VLOOKUP确实不方便,怎么办?打开我的"VBA代码解决方案"第一册,目录中第七讲:

我们拷贝出代码:并加以整理一下,为了大家理解,我做注释了,这也是大家要掌握的内容

Sub myFindNext

Dim StrFind As String '声明变量利用StrFind作为要查找的值

Dim Rng As Range

Dim FindAddress As String '声明变量利用FindAddress作为要查找的值的地址

StrFind = InputBox("请输入要查找的值:")

If Trim(StrFind) "" Then '如果输入的值不为空才去查找

With Sheet1.Range("A:A") '给出的范围

'进行查找的的设置

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then '如果不为空,记录下查到值的位置

FindAddress = Rng.Address

Do

Rng.Interior.ColorIndex = 6 '将查到的单元格颜色自定义

Set Rng = .FindNext(Rng) '再次查找

Loop While Not Rng Is Nothing And Rng.Address FindAddress '一直循环到刚才记录下的位置

End If

End With

End If

End Sub

把上述代码拷贝到VBE中,如截图:

运行:

好了,这节的内容就可以说是大体掌握了,但还没有完。

有了上述代码后,我要解决的不是反馈出颜色的变化,而是内容,如下需求:A和B列有型号和数量值;E列有型号,要根据E列的型号,求出数量的合计。

这时的代码该怎么写呢?这就要把上面的代码重新组织一下了。如下:

Sub mynzFindNext

Dim StrFind As String '声明变量利用StrFind作为要查找的值

Dim Rng As Range

Dim FindAddress As String '声明变量利用FindAddress作为要查找的值的地址

i = 2 '设置一个变量记录行数,但我没有声明

With Sheet1.Range("A:A") '给出的范围

Do While Cells(i, 5) ""

StrFind = Cells(i, 5) '这时的查找值就是Cells(i, 5)的数据了

Cells(i, 6) = "" '要记录数据的单元格清空

Set Rng = Nothing

'进行查找的的设置

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then '如果不为空,记录下查到值的位置

FindAddress = Rng.Address

Do

Cells(i, 6) = Cells(i, 6) + Cells(Rng.Row, 2) '在Cells(i, 6)中求和找到的数据

Set Rng = .FindNext(Rng) '再次查找

Loop While Not Rng Is Nothing And Rng.Address FindAddress '一直循环到刚才记录下的位置

End If

i = i + 1

Loop

End With

End Sub

代码截图:

再看运行的截图:

完成了上述的洗礼,那么你就可以说是较为全面地掌握了这个查找的方法,同时你也获得了一块新的积木,把它保存起来,可以随时的利用。

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

来源:VBA语言专业教育

相关推荐