在VBA中将列号转换为列字母

时间:2018-07-05 12:46:06

标签: excel excel-vba vba

我使用以下VBA代码将单元格C1 中的列号插入单元格B1

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

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

    A     B    C
1         3
2
3

到目前为止,所有这些都工作正常。


但是,与其插入3,不如插入列的字母。在这种情况下,应将字母C插入单元格B1 中。

我也尝试使用公式here,但是由于我没有使用给定的数字,因此无法使用它。相反,我使用.Column函数引用列。

要使其生效,我必须更改什么?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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(第三个)参数)给定表达式(第一个参数)的值。