ExcelVBA字母加数字实现列递增

先上代码。

Function englishAdd(ByVal str As String)
    Dim h As Integer
    h = Len(str)
    Do While h > 0
        While Mid(str, h, 1) = "Z"
            h = h - 1
            If h = 0 Then
                englishAdd = String(Len(str) + 1, "A")
                Exit Function
            End If
        Wend
        Mid(str, h, 1) = Chr(Asc(Mid(str, h, 1)) + 1)
        englishAdd = Mid(str, 1, h) & String(Len(str) - h, "A")
        Exit Do
    Loop
End Function

调用格式为:temp=englishAdd(string),其中string为需要递增的字符串(字母)

例:str="XFZ"

       str=englishAdd(str)

运行后str的值变为"XGA",自加了1列。

下面进行速度测试。本次测试选用了三种不同的列数递增方式,区别如下:

1、提取单元格所在地址字符串,使用split()函数进行拆分后提取,简单易懂。

2、将单元格所在列数转换成字母表示。转载自https://blog.csdn.net/gold_star/article/details/52527087,此方法是将数字直接转换成字母表示。

3、采用以上代码进行测试。

为保证测试代码的过程一致性,顾把以上代码中原本按值传递的str改为按引用传递,省去临时变量的赋值操作。

由于递增的列数为从1开始,Excel文件最大列数为16384,顾进行如下代码测试:

Sub 方法1()
    Dim v(2 To 16384) As String, a As Double
    a = Timer
    For num = 2 To 16384
        v2 = Split(Cells(1, num).Address, "$")
        v(num) = v2(1)
    Next
    Debug.Print Timer - a
End Sub

Sub 方法2()
    Dim v(2 To 16384) As String, st As String, a As Double
    a = Timer
    For num = 2 To 16384
        v(num) = f(num)
    Next
    Debug.Print Timer - a
End Sub

Sub 方法3()
    Dim v(2 To 16384) As String, str As String, a As Double
    str = "A"
    a = Timer
    For num = 2 To 16384
        v(num) = englishAdd(str)
    Next
    Debug.Print Timer - a
End Sub

 其中方法2的f()函数转自https://blog.csdn.net/gold_star/article/details/52527087,只是把其中的t改成了按值传递,方便测试。

下面是运行时间(手动按7次F5,通过debug记录运行时间):

方法1:方法2方法3
 .15234375  .0390625  .0234375 
 .1640625 .0546875  .01953125
 .15625 .05078125 .01953125
 .15625 .05078125 .0234375
 .16015625 .05859375 .01953125
 .16015625 .05078125 .01953125 
 .16015625  .05859375 .0234375 

可以看出方法3的最长时间比方法2的最快运行时间高了0.1秒以上,而方法1就省略了。

如果能够帮到你的话欢迎转载。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qi_____________

希望各位大佬能够施舍几个小破币

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值