使用VBA对Excel中列名称与列号之间进行转换.docx
《使用VBA对Excel中列名称与列号之间进行转换.docx》由会员分享,可在线阅读,更多相关《使用VBA对Excel中列名称与列号之间进行转换.docx(14页珍藏版)》请在冰点文库上搜索。
![使用VBA对Excel中列名称与列号之间进行转换.docx](https://file1.bingdoc.com/fileroot1/2023-6/9/dc78a4bd-ea72-43a1-befc-23c21da866eb/dc78a4bd-ea72-43a1-befc-23c21da866eb1.gif)
使用VBA对Excel中列名称与列号之间进行转换
使用VBA对Excel中列名称与列号之间进行转换
这里的列名称指的是A、B、C等样式的列,列号指列的编号,如1、2、3等等。
转换之后,A列对应的列号为1,反之,列号为1的列转换之后为A。
函数如下:
1、通过列名称转换成对应的列号。
FunctionGetColumnNum(ByValColumnNameAsString)AsInteger
DimResultAsInteger,FirstAsInteger,LastAsIntegerResult=1
IfTrim(ColumnName)<>""Then
IfLen(ColumnName)=1Then
Result=Asc(UCase(ColumnName))-64
ElseIfLen(ColumnName)=2Then
IfUCase(ColumnName)>"IV"ThenColumnName="IV"
First=Asc(UCase(Left(ColumnName,1)))-64
Last=Asc(UCase(Right(ColumnName,1)))-64
Result=First*26+Last
EndIf
EndIf
GetColumnNum=ResultEndFunction
测试:
SubTestGetColumnNum()
DimColumnNumAsInteger
ColumnNum=GetColumnNum("AA")
MsgBoxColumnNum,vbInformation,"测试"
EndSub
2、通过列号转换成对应的列名称。
FunctionGetColumnName(ByValColumnNumAsInteger)AsString
DimFirstAsInteger,LastAsInteger
DimResultAsString
IfColumnNum>256ThenColumnNum=256
First=Int(ColumnNum/27)
Last=ColumnNum-(First*26)
IfFirst>0Then
Result=Chr(First+64)
EndIfIfLast>0Then
Result=Result&Chr(Last+64)
EndIf
GetColumnName=Result
EndFunction测试:
SubTestGetColumnName()
DimColumnNameAsString
ColumnName=GetColumnName(27)
MsgBoxColumnName,vbInformation,"测试"
EndSub
3、说明
在以上两个函数中,如果输入的参数大于Excel的最大列号"IV"(256),则返回的值为最大的列数。
或有:
getcolname=iif(intcol\26,chr(64+intcol\26),"")&chr(64+intcolmod26)即可实现
其中:
iif(intcol\26,chr(64+intcol\26),"")返回列号的第一位如AB列的第一位为A,chr(64+intcolmod26)返回列号的低位,如如AB列的低位为B;
解释:
如果intcol=2,则intcol\26为假,函数iif返回“空格”,而chr(65+1mod26)=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
?