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

3
我使用以下的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中。

我还尝试使用此处的公式,但由于我没有使用给定的数字,而是使用.Column函数引用列,所以无法使其工作。

我需要更改公式中的什么内容才能使其正常工作?

2个回答

3

将绝对单元格地址中的“$”符号拆分出来。

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

谢谢。正是我想要的。 - Michi

1

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

事实上,如果我在我的(2)的位置使用(1),对于第26列,我会得到Z:,而不仅仅是Z,如下所述。
当使用有效的Excel列地址时,Split函数返回一个长度为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(第三参数))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接