excel vba 数字列转成字母列

Subfind()What=InputBox("请输入数字")k=CInt(What)\26j=CInt(What)Mod26Ifk<=26ThenIfj=0ThenIf... Sub find()
What = InputBox("请输入数字")
k = CInt(What) \ 26
j = CInt(What) Mod 26
If k <= 26 Then
If j = 0 Then
If k = 1 Then
MsgBox Chr(90)
Else
MsgBox Chr(65 - 2 + k) & Chr(90)
End If
Else
If k = 0 Then
MsgBox Chr(65 - 1 + j)
Else
MsgBox Chr(65 - 1 + k) & Chr(65 - 1 + j)
End If
End If
End If
If j = 0 And k = 27 Then MsgBox Chr(90) & Chr(90)
Cells(1, CInt(What)).Activate
End Sub
我只能写到ZZ。
三位字母列的,绞尽脑汁也无法想出啊。我有些怀疑用这种方法能不能做出来?
还是我没想出正确的算法。
请高手指教。
针对excel2007以上版本的,最大列XFD。
展开
 我来答
机秀荣翟秋
2019-04-13 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:27%
帮助的人:901万
展开全部
一定要用这种方法可以试试下面这个function,2010通过。
Function
ConvertToLetter(iCol
As
Integer)
As
String
Dim
iAlpha
As
Integer
Dim
iColTemp
As
Integer
Dim
i
As
Integer
If
iCol
>
702
Then
i
=
26
iColTemp
=
iCol
-
26
^
2
*
i
While
iColTemp
<
27
i
=
i
-
1
iColTemp
=
iCol
-
26
^
2
*
i
ConvertToLetter
=
Chr(i
+
64)
Wend
iCol
=
iColTemp
End
If
iAlpha
=
(iCol
-
1)
\
26
Select
Case
iAlpha
Case
0
Case
Else
ConvertToLetter
=
ConvertToLetter
&
Chr(64
+
iAlpha)
End
Select
ConvertToLetter
=
ConvertToLetter
&
Chr(64
+
((iCol
-
1)
Mod
26)
+
1)
End
Function
另外,如果你只是想获取单元格列标,可以使用下面的代码,应该是最简单直接的。
GetColumn
=
Split(Cells(1,
C).Address,
"$")(1)
‘C
是列号
hesperchen
推荐于2016-03-11 · TA获得超过713个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:237万
展开全部
一定要用这种方法可以试试下面这个function,2010通过。

Function ConvertToLetter(iCol As Integer) As String

Dim iAlpha As Integer

Dim iColTemp As Integer

Dim i As Integer

If iCol > 702 Then

i = 26

iColTemp = iCol - 26 ^ 2 * i

While iColTemp < 27

i = i - 1

iColTemp = iCol - 26 ^ 2 * i

ConvertToLetter = Chr(i + 64)

Wend
iCol = iColTemp

End If

iAlpha = (iCol - 1) \ 26
Select Case iAlpha

Case 0

Case Else

ConvertToLetter = ConvertToLetter & Chr(64 + iAlpha)

End Select

ConvertToLetter = ConvertToLetter & Chr(64 + ((iCol - 1) Mod 26) + 1)

End Function

另外,如果你只是想获取单元格列标,可以使用下面的代码,应该是最简单直接的。

GetColumn = Split(Cells(1, C).Address, "$")(1) ‘C 是列号
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8f7731f67
2013-06-28 · TA获得超过120个赞
知道答主
回答量:108
采纳率:0%
帮助的人:81.1万
展开全部
Sub find()
what = InputBox("请输入数字")*1
set mc=cells(1,what)
msgbox mid(mc.address,2,len(mc.address)-3)
Cells(1, CInt(What)).Activate
End Sub

  晕,被LZ的VBA坑了,想天边去了。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SXB8113
2013-06-27 · 知道合伙人软件行家
SXB8113
知道合伙人软件行家
采纳数:14678 获赞数:57822
1969.2入伍,防化兵。1982.2转业到公安局。上夜大取得大专文凭。从事公安科技相关工作。

向TA提问 私信TA
展开全部
点“工具”-----选项----常规----勾选“R1C1引用式样-----确定。列标A、B、C.....就变成1、2、3...了。

没看清题,答错了。不必在意。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YANG10666118
2013-06-27 · 超过18用户采纳过TA的回答
知道答主
回答量:142
采纳率:0%
帮助的人:43.2万
展开全部
换个思路呗!用case 1 to 26,case 27 to 676,顺推,这样就能往后写四位,五位甚至更高位数了吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式