分享

Excel VBA 数组应用/查询凭证空号/VBA代码优化/AI辅助

 冷茶视界 2023-11-15 发布于江苏

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

我原来的代码是这样的:

    '用一个完整的数字序列去比较    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,它给出的方式还是非常好的,就按照它的代码的思路改了改,发现效率相差真是惊人。

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

好了,今天就啰嗦这么多,需要完整空号查询代码的小伙伴赶快在留言区留言:“凭证空号"+评论,再私信留下邮箱吧。我们下期再见.

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多