60后爱上VBA

41 次浏览

摘要

一位60后财务从业者回顾从早期电子表格、Excel 函数,到学习 VBA 代码助手与语音编程的过程。文章结合 SAP 数据转换、生产系统与财务软件间的数据整理,以及工资核算代码,分享围绕岗位需求持续改进工具的经历,并附数组、字典匹配示例。处理用时、人员投入和职业经历均为作者自述,硬件条件变化也在原文中说明。

作者:小李*(财务) · 学员投稿;文中效果与效率为作者自述。

昨天办好了退休手续。66年出生,81年参加高考,83年毕业。上学时没有电脑(也没听说过电脑)。毕业后分配到机关工作。92年参加县审计局招聘,考了全市(不是全县是全市)第1名,因为没有背景面试被刷,一气之下自动离职去了外资企业。

那家外资92年刚成立,老板带来2台电脑,一台黑白屏一台彩色屏,应该是286,数据要保存在A/B盘保存才能带出,听到磁盘保存的嘶啦声,别提多美了。

98年到另一家日企,那时还没有EXCEL,表格叫Lotus。那时国内也没有财务软件,我用Lotus做了个财务凭证新增保存查询,用起来挺好的。

后来,office开始使用了,我一直用。

我记得2010年我到一家民企,几个月后这家民企被德企全资收购了。那家德企有一套德国的管理查询表格,用的是国际会计准则,欧元为货币单位。我按表格的要求,将中国的会计准则与国际会计准则进行转换(这项工作原来是请一家四大做的,一年要收80万人民币),一开始老外不相信,后来我做一套,事务所做一套,两个一比较,真的没有差异,第2年就用我做的了。因为不懂英语(德企用英语),在德企工作了4年多(从民企开始算5年),给了15万辞退金,离开了德企。

2014年,找到一个叫“我要自学网”,看到excel课程,跟着学。一点一点的,也掌握了十几二十个函数,用起来挺顺手的。

60后爱上VBA

因为我2009年考了注会,2015年就到会计师事务所工作了。大家可能对会计师不太了解,小所资金、人才不足,基本上是靠手工加加减减,大部分的人只能用审计软件刷刷底稿。遇到大项目就干瞪眼了。其实大事务所也是如此,我曾见过大事务所因为无法从客户的国内软件中导数据,请客户财务电子填表格满足审计底稿的事,而且这种情况现在还存在。

我们事务所也有使用SAP软件的客户(而且是集团公司,下面有几十家子公司),这个软件无法用审计软件取数,怎么办呢,我就用函数,记得那时用函数转换一家子公司,100万行的数据要用一天的时间主要是电脑配置不足(4G内存、机械硬盘)。

那时我还给同事讲如何转换,10个人一个都没有学会。没办法,只能自己摸索。2023年在网上找到郑广学老师的vba代码助手,果断买了。

60后爱上VBA

这是用代码助手改进后的SAP转换代码

60后爱上VBA

这时,100万行的数据大约需要2个小时(电脑硬件条件也好了一些有16G内存)。

这些年,一直在琢磨VBA助手,现在在一家民营任财务顾问,帮助企业写了很多的转换程序,节省了很多人力。如:原来数据中心用了6个人,整天从生产系统中数据转换到金蝶星空软件,现在半个人就可以了(半个人的原因是还要做其他工作)。

60后爱上VBA

说句老实话,代码助手中,我保存了几十个自己编写的代码,极大地提高了工作效率和准确性。

大家看看下面的这段代码就是运用VBA代码助手写出来的。

Sub 匹配字典方式表1匹配表2内容()

'VBA,表1有两列分别为卷号、净重,表2有两列分别为卷号、等级,请用中文变量、数组、字典方式,将表2的卷号对应等级对应到表1的第3列,数组写回表1

Dim ws1 As Worksheet, ws2 As Worksheet

Dim 表1数据 As Variant, 表2数据 As Variant

Dim 字典 As Object

Dim i As Long, 最后行 As Long

' 设置工作表对象

Set ws1 = ThisWorkbook.Sheets("表1") ' 修改为你的表1名称

Set ws2 = ThisWorkbook.Sheets("表2") ' 修改为你的表2名称

' 读取表2数据到字典(卷号 → 等级)

Set 字典 = CreateObject("Scripting.Dictionary")

最后行 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row

表2数据 = ws2.Range("A2:B" & 最后行).Value ' 假设表2数据从第2行开始

For i = 1 To UBound(表2数据, 1)

If Not 字典.Exists(表2数据(i, 1)) Then

字典.Add 表2数据(i, 1), 表2数据(i, 2) ' 键=卷号,值=等级

End If

Next i

' 读取表1数据到数组,并匹配等级

最后行 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row

表1数据 = ws1.Range("A2:C" & 最后行).Value ' 表1的C列用于写入等级

For i = 1 To UBound(表1数据, 1)

If 字典.Exists(表1数据(i, 1)) Then

表1数据(i, 3) = 字典(表1数据(i, 1)) ' 将等级写入数组第3列

Else

表1数据(i, 3) = "无匹配等级" ' 未匹配时的提示

End If

Next i

' 将数组写回表1的C列

ws1.Range("C2:C" & 最后行).Value = Application.Index(表1数据, 0, 3)

MsgBox "等级匹配完成!", vbInformation

End Sub

今年3月5日,刚过完春节,我在听郑老师PYTHON课时听到老师又推出了vbayyds用嘴编程课程,果断买了。只要一有时间,就听老师的直播课。60后爱上VBA

今天给大家展示一下,用VBA编写自动完成月工资核算的VBA代码

60后爱上VBA

学无止境,虽花甲之年,不忘努力上进。感谢郑老师,与同学们共勉。

60后爱上VBA插图6

工具名称:VBAYYDS语音编程助手
适合人群:常用Excel且希望自动化操作但不想深学VBA的职场人
体验方式:下载地址vbayyds.com
✨ 让Excel听懂你的需求,或许只需要一次尝试。
✨ 你的时间,值得用在更值得的事情上。
官网下载地址 vbayyds.com
淘宝搜索 vbayyds
购买方式 加微信EXCEL880B
60后爱上VBA插图7