|
這里的列名稱指的是A、B、C等樣式的列,列號指列的編號,如1、2、3等等。
轉(zhuǎn)換之后,A列對應(yīng)的列號為1,反之,列號為1的列轉(zhuǎn)換之后為A。函數(shù)如下:
1、通過列名稱轉(zhuǎn)換成對應(yīng)的列號。
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、通過列號轉(zhuǎn)換成對應(yīng)的列名稱。
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、說明
在以上兩個函數(shù)中,如果輸入的參數(shù)大于Excel的最大列號"IV"(256),則返回的值為最大的列數(shù)。 或有:getcolname=iif(intcol\26,chr(64 + intcol\26), " ")& chr(64+intcol mod 26)即可實現(xiàn) 其中:iif(intcol\26,chr(64 + intcol\26), " ")返回列號的第一位如AB列的第一位為A, chr(64+intcol mod 26)返回列號的低位,如如AB列的低位為B; 解釋:如果intcol=2,則intcol\26為假,函數(shù)iif返回“空格”,而chr(65+1mod 26)=65,65為A,所以1對應(yīng)的列號為b,此種算法有錯誤。 如果intcol>26則intcol\26為真,函數(shù)iif返回 除法(/)、整數(shù)除法(\)、求模運算(Mod) IIF 函數(shù) 根據(jù)表達(dá)式的值,來返回兩部分中的其中一個。 IIF(expr, truepart, falsepart) IIF 函數(shù)的語法含有下面這些命名參數(shù): expr 必要參數(shù)。用來判斷真?zhèn)蔚谋磉_(dá)式。 truepart 必要參數(shù)。如果 expr 為 True,則返回這部分的值或表達(dá)式。 falsepart 必要參數(shù)。如果 expr 為 False,則返回這部分的值或表達(dá)式。
下表列出了字符集中的 128 - 255。
|
|
|