分享

使用VBA对Excel中列名称与列号之间进行转换

 笔录收藏 2013-07-22
这里的列名称指的是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,则返回这部分的值或表达式。


代码 字符 代码 字符 代码 字符 代码 字符
0   32 [空格] 64 @ 96 `
1   33 ! 65 A 97 a
2   34 " 66 B 98 b
3   35 # 67 C 99 c
4   36 $ 68 D 100 d
5   37 % 69 E 101 e
6   38 & 70 F 102 f
7   39 ' 71 G 103 g
8 ** 40 ( 72 H 104 h
9 ** 41 ) 73 I 105 i
10 ** 42 * 74 J 106 j
11   43 + 75 K 107 k
12   44 , 76 L 108 l
13 ** 45 - 77 M 109 m
14   46 . 78 N 110 n
15 ? 47 / 79 O 111 o
16 ? 48 0 80 P 112 p
17 ? 49 1 81 Q 113 q
18 ? 50 2 82 R 114 r
19  51 3 83 S 115 s
20  52 4 84 T 116 t
21  53 5 85 U 117 u
22 ? 54 6 86 V 118 v
23 ? 55 7 87 W 119 w
24 ? 56 8 88 X 120 x
25 ? 57 9 89 Y 121 y
26 ? 58 : 90 Z 122 z
27  59 ; 91 [ 123 {
28 ? 60 < 92 \ 124 |
29 ? 61 = 93 ] 125 }
30 - 62 > 94 ^ 126 ~
31   63 ? 95 _ 127 ?

下表列出了字符集中的 128 - 255。

代码 字符 代码 字符 代码 字符 代码 字符
128 160 [空格] 192 à 224 à
129 ? 161 ? 193 á 225 á
130 ? 162 194 ? 226 a
131 ? 163 195 ? 227 ?
132 ? 164 ¤ 196 ? 228 ?
133 165 197 ? 229 ?
134 ? 166 | 198 ? 230 ?
135 ? 167 § 199 ? 231 ?
136 ? 168 ¨ 200 è 231 ?
137 169 ? 201 é 232 è
138 ? 170 a 202 ê 233 é
139 ? 171 ? 203 ? 234 ê
140 ? 172 ? 204 ì 235 ?
141 ? 173 - 205 í 236 ì
142 ? 174 ? 206 ? 237 í
143 ? 175 ˉ 207 ? 238 ?
144 ? 176 ° 208 D 239 ?
145 177 ± 209 ? 240 e
146 178 2 210 ò 241 ?
147 179 3 211 ó 242 ò
148 180 212 ? 243 ó
149 ? 181 μ 213 ? 244 ?
150 182 ? 214 ? 245 ?
151 183 · 215 × 246 ?
152 ? 184 ? 216 ? 247 ÷
153 ? 185 1 217 ù 248 ?
154 ? 186 o 218 ú 249 ù
155 ? 187 ? 219 ? 250 ú
156 ? 188 ? 220 ü 251 ?
157 ? 189 ? 221 Y 252 ü
158 ? 190 ? 222 T 253 y
159 ? 191 ? 223 ? 254 t


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多