zoukankan      html  css  js  c++  java
  • VBA实现数字列与字母列的相互转化

    gold_star

    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
    1. 方法二:
    Function GetColumn(char)
        Dim t
        On Error Resume Next
        If IsNumeric(char) Then
            t = Split(Cells(1, char).Address, "$")(1)
        Else
            t = Columns(char & ":" & char).Column
        End If
        If Err.Number <> 0 Then GetColumn = "超出范围" Else GetColumn = t
    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列标数字与字母的转换)

  • 相关阅读:
    Axis,axis2,Xfire以及cxf对比 (转)
    客户端调用服务器端三种方式
    webservice发送数据,取数据的方式
    强制关闭myeclipse出现的问题
    取当前系统的上月时间
    oracle 报Ora-01008错误:oracle 并非所有变量都已绑定的原因.TO_number();动态执行select..into..语句时
    ResultSetMetaData rsmd = rs.getMetaData()是什么意思?
    概率质量函数:怀孕周期的PMF
    Python 正则表达式
    TF-IDF
  • 原文地址:https://www.cnblogs.com/grj001/p/12223132.html
Copyright © 2011-2022 走看看