我使用以下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
函数引用列。
要使其生效,我必须更改什么?
答案 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
(第三个)参数)给定表达式(第一个参数)的值。