这里的列名称指的是A、B、C等样式的列,列号指列的编号,如1、2、3等等。
转换之后,A列对应的列号为1,反之,列号为1的列转换之后为A。函数如下:
1、通过列名称转换成对应的列号。
Function GetColumnNum(ByVal ColumnName As String) As Integer
Dim Result As Integer, First As Integer, Last As Integer Result = 1
If Trim(ColumnName) <> "" Then
If Len(ColumnName) = 1 Then
Result = Asc(UCase(ColumnName)) - 64
ElseIf Len(ColumnName) = 2 Then
If UCase(ColumnName) > "IV" Then ColumnName = "IV"
First = Asc(UCase(Left(ColumnName, 1))) - 64
Last = Asc(UCase(Right(ColumnName, 1))) - 64
Result = First * 26 + Last
End If
End If
GetColumnNum = Result End Function
测试:
Sub TestGetColumnNum()
Dim ColumnNum As Integer
ColumnNum = GetColumnNum("AA")
MsgBox ColumnNum, vbInformation, "测试"
End Sub
2、通过列号转换成对应的列名称。
Function GetColumnName(ByVal ColumnNum As Integer) As String
Dim First As Integer, Last As Integer
Dim Result As String
If ColumnNum > 256 Then ColumnNum = 256
First = Int(ColumnNum / 27)
Last = ColumnNum - (First * 26)
If First > 0 Then
Result = Chr(First + 64)
End If If Last > 0 Then
Result = Result & Chr(Last + 64)
End If
GetColumnName = Result
End Function
测试:
Sub TestGetColumnName()
Dim ColumnName As String
ColumnName = GetColumnName(27)
MsgBox ColumnName, vbInformation, "测试"
End Sub
3、说明
在以上两个函数中,如果输入的参数大于Excel的最大列号"IV"(256),则返回的值为最大的列数。 或有:getcolname=iif(intcol\26,chr(64 + intcol\26), " ")& chr(64+intcol mod 26)即可实现 其中:iif(intcol\26,chr(64 + intcol\26), " ")返回列号的第一位如AB列的第一位为A, chr(64+intcol mod 26)返回列号的低位,如如AB列的低位为B; 解释:如果intcol=2,则intcol\26为假,函数iif返回“空格”,而chr(65+1mod 26)=65,65为A,所以1对应的列号为b,此种算法有错误。 如果intcol>26则intcol\26为真,函数iif返回 除法(/)、整数除法(\)、求模运算(Mod) IIF 函数 根据表达式的值,来返回两部分中的其中一个。 IIF(expr, truepart, falsepart) IIF 函数的语法含有下面这些命名参数: expr 必要参数。用来判断真伪的表达式。 truepart 必要参数。如果 expr 为 True,则返回这部分的值或表达式。 falsepart 必要参数。如果 expr 为 False,则返回这部分的值或表达式。
下表列出了字符集中的 128 - 255。
|
|