VBA实现数字列与字母列的相互转化

1 篇文章 0 订阅

1,方法一:

'列数转字母
Function CNtoW(ByVal num As Long) As String
    CNtoW = Replace(Cells(1, num).Address(False, False), "1", "")
End Function
'字母转列数
Function CWtoN(ByVal AB As String) As Long
    CWtoN = Range("a1:" & AB & "1").Cells.Count
End Function


2,方法二:

  1. Function GetColumn(char)
  2.     Dim t
  3.     On Error Resume Next
  4.     If IsNumeric(char) Then
  5.         t = Split(Cells(1, char).Address, "$")(1)
  6.     Else
  7.         t = Columns(char & ":" & char).Column
  8.     End If
  9.     If Err.Number <> 0 Then GetColumn = "超出范围" Else GetColumn = t
  10. End Function

3,方法三:


不过就功能、目的来说,确实意义不大。

因为既然用到了VBA,就可以后台使用多种方法处理列数,没必要再写一个函数来用。

比如, cells(n,"AB") 或者 Range("AB" & n) 就可以直接定位到指定列标所在列。

或者用 cells(n,28).Address 来获取列标字母。

如同楼上各位的例子那样。
而如果需要自己计算把列序号转换为字母标签,则可以用下面迭代计算:

假设t为列序号,那么:

      s = ""
      Do
          s = Chr((t - 1) Mod 26 + 65) & s       '以26除数反複Mod求余得到对应1-26字母
       t = Int((t - 1) / 26)                         '再用26除后Int取整进行迭代计算
    Loop Until t <= 0                                 '反複算直至数t已不能除26求余止
+++++++
Function f(t)
    Do
        f = Chr((t - 1) Mod 26 + 65) & f
        t = Int((t - 1) / 26)
    Loop Until t = 0
End Function
+++++++
或者写成:
+++++++
Function f(t)
    Do
        f = Chr((t - 1) Mod 26 + 65) & f
        t = (t - 1) \ 26
    Loop While t
End Function
+++++++


(本文主要内容归纳自网上文章:EXCEL列标数字与字母的转换)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值