Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2437|回复: 8

[已解决]请大侠们帮我写一个获取列标的自定义函数

[复制链接]
发表于 2012-1-5 17:59 | 显示全部楼层 |阅读模式
要求:1.只需要获取1-256数字范围内的列标

           2.超出256需要提示数据超出范围(小于1的不考虑)

最终目的就是:
列标(1)=A,          列标(256)=IV,        列标(257)=超出范围(并要提示)


最佳答案
2012-1-5 18:00
本帖最后由 sunjing-zxl 于 2012-1-5 18:03 编辑

试试看

  1. Public Function 列标(数字 As Integer) As String
  2.     If 数字 Mod 26 = 0 Then
  3.         列标 = VBA.IIf(数字 \ 26 = 1, "", VBA.Chr(数字 \ 26 + 63)) & "Z"
  4.     Else
  5.         If 数字 <= 256 Then
  6.             列标 = VBA.IIf(数字 \ 26 = 0, "", Chr(数字 \ 26 + 64)) & Chr(数字 Mod 26 + 64)
  7.         Else
  8.             列标 = "超出范围"
  9.             MsgBox "03版E表只有256列,你输入的列数不存在.请在1-256之间选取数字"
  10.         End If
  11.     End If
  12. End Function
复制代码

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-1-5 18:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunjing-zxl 于 2012-1-5 18:03 编辑

试试看

  1. Public Function 列标(数字 As Integer) As String
  2.     If 数字 Mod 26 = 0 Then
  3.         列标 = VBA.IIf(数字 \ 26 = 1, "", VBA.Chr(数字 \ 26 + 63)) & "Z"
  4.     Else
  5.         If 数字 <= 256 Then
  6.             列标 = VBA.IIf(数字 \ 26 = 0, "", Chr(数字 \ 26 + 64)) & Chr(数字 Mod 26 + 64)
  7.         Else
  8.             列标 = "超出范围"
  9.             MsgBox "03版E表只有256列,你输入的列数不存在.请在1-256之间选取数字"
  10.         End If
  11.     End If
  12. End Function
复制代码

回复

使用道具 举报

发表于 2012-1-5 18:02 | 显示全部楼层
即然二楼让人占了我们就不献丑了
回复

使用道具 举报

发表于 2012-1-5 18:51 | 显示全部楼层
本帖最后由 Select 于 2012-1-6 09:52 编辑
  1. Function LB(x As Integer) As String
  2.     If x > 0 And x < 257 Then
  3.         LB = Left(Cells(1, x).Address(0, 0), Len(Cells(1, x).Address(0, 0)) - 1)
  4.     Else
  5.         MsgBox "列标不存在", 48, "出错了"
  6.     End If
  7. End Function
复制代码

评分

参与人数 1 +3 收起 理由
新月妹妹 + 3 谢谢

查看全部评分

回复

使用道具 举报

发表于 2012-1-5 20:44 | 显示全部楼层
  1. Function LB(x) As String
  2.     If IsNumeric(x) Then
  3.         If x >= 1 And x <= 256 Then
  4.             LB = "列标:" & Replace(Cells(1, Int(x)).Address(0, 0), 1, "")
  5.         Else
  6.             LB = "列标超范围不存在"
  7.         End If
  8.     Else
  9.         On Error GoTo ErrExt
  10.         LB = "第" & Range(x & 1).Column & "列"
  11.         Exit Function
  12. ErrExt:
  13.         LB = "列标错误不存在"
  14.     End If
  15. End Function
复制代码
呵呵,索性改一下,一个可以输入合法数字返回列标,输入合法列标返回列数的自定义函数。

很好玩的。

评分

参与人数 2 +18 收起 理由
windimi007 + 15 很给力!
新月妹妹 + 3 谢谢,学习了

查看全部评分

回复

使用道具 举报

发表于 2012-1-6 09:01 | 显示全部楼层
香川群子 发表于 2012-1-5 20:44
呵呵,索性改一下,一个可以输入合法数字返回列标,输入合法列标返回列数的自定义函数。

很好玩的。

群子老师,试了一下你的代码,发现:
只有这样写:
  1. =lb("a")
复制代码

才能返回“第1列”这个结果。
请问怎么样修改代码,能使下面的写法(没有引号)
  1. =lb(a)
复制代码

返回“第1列”这个结果呢?{:3112:}

点评

...工作表函数哦,哥。  发表于 2012-1-6 09:40
回复

使用道具 举报

发表于 2012-1-6 12:50 | 显示全部楼层
windimi007 发表于 2012-1-6 09:01
群子老师,试了一下你的代码,发现:
只有这样写:

自定义函数如果在工作表中使用,那么形式为:

举例:
A1   B1
a     =LB(A1) 返回结果:第1列

即,公式中引用单元格地址时,被引用单元格中内容不需要加""符号。

但是,如果是直接在公式中引用,则需要加""符号,

如:
A1
=LB("a") 返回结果:第1列

评分

参与人数 1 +15 收起 理由
windimi007 + 15 谢谢群子老师指导!

查看全部评分

回复

使用道具 举报

发表于 2012-1-6 12:51 | 显示全部楼层
不做错误提醒是的最简洁代码如下:
  1. Function LB(x) As String
  2.     On Error Resume Next
  3.     If IsNumeric(x) Then LB = "列标 " & Replace(Cells(1, x).Address(0, 0), 1, "") Else LB = "第" & Range(x & 1).Column & "列"
  4. End Function
复制代码

评分

参与人数 1 +16 金币 +18 收起 理由
爱疯 + 16 + 18 支持

查看全部评分

回复

使用道具 举报

发表于 2012-1-6 12:53 | 显示全部楼层
香川群子 发表于 2012-1-6 12:50
自定义函数如果在工作表中使用,那么形式为:

举例:

再次感谢群子老师的解答!{:1612:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 05:15 , Processed in 0.268437 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表