【问题标题】:Convert column number to column letter in VBA在VBA中将列号转换为列字母
【发布时间】:2018-12-13 22:59:51
【问题描述】:

我使用以下 VBA 代码将列号从 Cell C1 插入 Cell B1

Sub AdressColumn()
Sheet1.Range("B1").Value = Sheet1.Range("C1").Column
End Sub

在这种情况下,我的电子表格上的结果如下所示:

    A     B    C
1         3
2
3

到目前为止,这一切都很好。


但是,我宁愿插入列的字母,而不是插入 3。在这种情况下,应将字母 C 插入 Cell B1

我也尝试使用公式here,但我无法使其工作,因为在我的情况下我没有使用给定的数字。相反,我使用 .Column 函数引用一个列。

我必须对我的公式进行哪些更改才能使其发挥作用?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    将 $ 拆分为绝对单元格地址。

    Sub AdressColumn()
        Sheet1.Range("B1").Value = split(Sheet1.Range("C1").address, "$")(1)
    End Sub
    

    ...或将冒号从相对完整的列地址中拆分出来。

    Sub AdressColumn()
        Sheet1.Range("B2").Value = Split(Sheet1.Range("C1").EntireColumn.Address(0, 0), ":")(0)
    End Sub
    

    【讨论】:

    • 谢谢。正是我想要的。
    【解决方案2】:

    user4039065 很接近,但是行尾的下标应该是(2)。然后,例如,677 代表列“ZA”,列 16384 代表“XFD”,通过以下函数:

        Const MAX_COL_NUMBER = 16384
            ...
        Function columnNumberToColumnString(col As Integer) As String
    
          If col > MAX_COL_NUMBER Or col < 1 Then
            columnNumberToColumnString = "ERROR":     Exit Function
          Else
    
            columnNumberToColumnString = Split(Columns(col).Address, "$")(2)
    
          End If
    
    ' delete code block below after seeing how Split works
    msg = "Split <" & Columns(col).Address & ">"
        For i = 0 To UBound(Split(Columns(col).Address, "$"))
            msg = msg + Chr(13) & Chr(10) & "Substring " & i & _
                  " is <" & Split(Columns(col).Address, "$")(i) & ">"        
        Next
    MsgBox msg       
    
    
      End Function
    

    事实上,如果我使用(1) 代替我的(2),那么对于第26 列,我会得到Z:,而不仅仅是Z,如下所述。

    Split 函数与有效的 Excel 列地址一起使用时,返回一个长度为 3 的数组,分阶段显示最终结果是如何得出的。

    以256为例,msg代码块显示的结果为:

    Address of column number 256 is <$IV:$IV>
    Substring 0 is <>           (since first $ is first character, strip it and all after)
    Substring 1 is <IV:>        (since second $ is after the :, strip it and all after)
    Substring 2 is <IV>         (since : above is a usual delimiter, strip it)
    

    Split "返回一个从零开始的一维数组,包含 ... '所有子字符串' "(如果省略了limit(第三个)参数)给定表达式(第一个参数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多