Excel VBA 数组应用/查询凭证空号/VBA代码优化/AI辅助-vba查找重复数据

2023-09-01 20:26:38

 

​​​本文于2023年3月23日首发于本人同名公众号:Excel活学活用,更多文章敬请关注!

在我的《财务管理系统》里,在填制凭证的时候,可以查询凭证空号,以便填补空号:

我原来的代码是这样的:

用一个完整的数字序列去比较 For i = 1 To arr(iRow, 1) For j = 1 To iRow             If arr(j, 1) = i Then t = 1 End If Next If t = 0 Then             ReDim Preserve arrNumber(k) arrNumber(k) = i k = k + 1 End If t = 0     Next   

代码逻辑,来来来,AI同志,你来解释一下:

看来我的代码是有点问题,至少效率比较差,于是AI也帮我出了主意,过程略过,最终,优化后的代码如下:

数组相邻元素比较 If arr(1, 1) > 1 Then For i = 1 To arr(1, 1) ReDim Preserve arrNumber(k) arrNumber(k) = i Next For i = 1 To iRow - 1 If arr(i + 1, 1) - arr(i, 1) > 1 Then For j = arr(i, 1) + 1 To arr(i + 1, 1) - 1 ReDim Preserve arrNumber(k) arrNumber(k) = j k = k + 1 Next End If Next Else For i = 1 To iRow - 1 If arr(i + 1, 1) - arr(i, 1) > 1 Then For j = arr(i, 1) + 1 To arr(i + 1, 1) - 1 ReDim Preserve arrNumber(k) arrNumber(k) = j k = k + 1 Next End If Next End If

为了测试这两种方法的效率,我们做点前戏,先准备一个启用宏的Excel文件“凭证空号":

首先,我们准备一个比较大的自然数列,选中Sheet1,A1:A15000单元格,输入公式=ROW(),然后按Ctrl+Enter,填充选择区域,下一步我们把它粘贴成数值,因为接着我们要删除部分数字。

然后,我们在b列输入公式=mod(a1,5),得到一个0-4的循环序列,随便筛选几个,把选中的数字复制到sheet2,然后回头把它删除,这样我们就得到一个不完整的自然数序列。

接着我们就要用VBA代码把缺少的数字给它列出来:

我们先运行旧代码,然后再把它注释掉,再运行新代码:

我们可以看到两者的差距是很大的,可见代码优化还是非常必要的。

其实,旧代码我也用了好长时间了,由于数据量不大,感觉不到效率低下的问题。今天,在合并用户窗体的时候,看到这段代码,感觉有点陌生了,于是稍微梳理一下,感觉有点问题,两层完全循环,如果数据量大肯定是不行的。

于是,想着怎么改改,然后就把我的需求告诉AI,它给出的方式还是非常好的,就按照它的代码的思路改了改,发现效率相差真是惊人。

表面上看我以前的代码要比现在的代码量少,看上去简洁,但真应了一句话“简单粗暴”,效率方面就差了很多。

好了,今天就啰嗦这么多。我们下期再见.

​​​​本文于2023年3月23日首发于本人同名公众号:Excel活学活用,更多文章敬请关注!


以上就是关于《Excel VBA 数组应用/查询凭证空号/VBA代码优化/AI辅助-vba查找重复数据》的全部内容,本文网址:https://www.7ca.cn/baike/73260.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜