如何使用递归函数实现Excel列号转换列标

163 篇文章 16 订阅
39 篇文章 0 订阅

在Excel中,列标与列号转换是VBA开发过程中经常用到的功能,下面这篇博客为大家解释了多种方法。

Excel列标与列号转换

那么这篇博文的核心是“递归过程”,实现这个功能并不是必须使用递归过程,但是这也不失为一种实现方法,对于大家理解和递归过程是个不错的案例。

递归过程从算法上看貌似很复杂,其实简单的说就是,代码过程中包含调用自身过程的代码,这样就构成了嵌套调用,当然需要合理的涉及编程逻辑,确保递归过程能够正确的结束执行。

示例代码如下。

Function sGetColumnIndex(lngColNum As Long) As String
    If lngColNum > 26 Then
        sGetColumnIndex = sGetColumnIndex(CLng((lngColNum - 1) \ 26)) & VBA.Chr((lngColNum - 1) Mod 26 + 65)
    Else
        sGetColumnIndex = VBA.Chr((lngColNum - 1) Mod 26 + 65)
    End If
End Function

【代码解析】

假设调用函数的VBA代码为Debug.Print sGetColumnIndex(731)
下面解释一下代码的执行过程,下文中[X-Y]代表第X次调用自定义函数,执行其中的第Y行代码。
[1-1]: 调用函数sGetColumnIndex(731)
[1-2]: 满足条件
[1-3]: 再次调用函数sGetColumnIndex(28)得到结果才能和’VBA.Chr(67)'的结果进行合并运算
[2-1]: 调用函数sGetColumnIndex(28)
[2-2]: 满足条件
[2-3]: 再次调用函数sGetColumnIndex(1)得到结果才能和’VBA.Chr(66)‘的结果进行合并运算
[3-1]: 调用函数sGetColumnIndex(1)
[3-2]: 不满足条件,跳转至 [3-4]
[3-5]: sGetColumnIndex赋值为’VBA.Chr(65)’,即返回值为A
[3-6]: 判断语句结束
[3-7]: 第3次调用结束,返回第3次调用的调用点
继续执行 [2-3]: sGetColumnIndex(1)结果为A,'VBA.Chr(66)'的结果为B,此时sGetColumnIndex赋值为AB
[2-6]: 判断语句结束
[2-7]: 第2次调用结束,返回第2次调用的调用点
继续执行 [1-3]: sGetColumnIndex(28)结果为AB,'VBA.Chr(67)'的结果为C,此时sGetColumnIndex赋值为ABC
[1-6]: 判断语句结束
[1-7]: 结束程序执行,输入结果ABC

虽然只有7行代码,但是被反复调用多次,如果大家看上面的文字仍然无法理解执行过程,那么可以在VBE中,使用单步执行功能,逐步运行代码,再对照上面的文字解释。

第3次调用时,按【Ctrl+L】组合键可以打开【堆栈】对话框查看调用过程,如下图所示。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值