点击上面蓝色字体关注公众号
就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
EndWith
End If
End Sub
把上述代码拷贝到VBE中,如截图:
运行:
好了,这节的内容就可以说是大体掌握了,但还没有完。
三 要在原代码的基础上活用。有了上述代码后,我要解决是不是反馈出颜色的变化,而是内容,如下需求:A和B列有型号和数量值;E列有型号,要根据E列的型号,求出数量的合计。
这时的代码该怎么写呢?这就要把上面的代码重新组织一下了。如下:
Sub mynzFindNext()
Dim StrFind AsString '声明变量利用StrFind作为要查找的值
Dim Rng As Range
Dim FindAddress AsString '声明变量利用FindAddress作为要查找的值的地址
i = 2 '设置一个变量记录行数,但我没有声明
WithSheet1.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 IsNothing Then '如果不为空,记录下查到值的位置
FindAddress =Rng.Address
Do
Cells(i, 6) =Cells(i, 6) + Cells(Rng.Row, 2) '在Cells(i, 6)中求和找到的数据
Set Rng =.FindNext(Rng) '再次查找
Loop While NotRng Is Nothing And Rng.Address FindAddress '一直循环到刚才记录下的位置
End If
i = i + 1
Loop
End With
End Sub
再看运行的截图:
完成了上述的洗礼,那么你就可以说是较为全面的掌握了这个查找的方法,同时你也获得了一块新的积木,把它保存起来,可以随时的利用。
四 一路收获,一路成熟。
对于每个积木要消化学习,多问为什么,代码往往有不完善的地方,这种不完善是根据实际需求而转变的,如上面的代码,我再次提出提出几个问题(或者是需求);如何处理?
1 如上面的例子如果Cells(Rng.Row, 2)不为数字该怎么处理呢?请读者思考?
2 如让代码执行完成后给予提示呢?
3 如果是两个工作表文件呢?如表1是基础数据,表2是需要查找的数据.也就是说上面的E\F列的内容在另外的工作表中,该如何处理?
4 如果数据是大量的该如何增加动态的效果呢?
等等,读者可以深入的思考。
当你遇到了不同的问题,解决它,逐渐你会收获很多,不仅是积木,还有你的成熟,对于真正管理岗位的理解。
分享成果,随喜正能量
长按二维码 关注公众号
长按二维码 关注版主微信
标VBA加好友,获VBA积木信息
|
|