ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ldy

[Excel 程序开发] [第53期]EXCEL26进制来回转换 ---------已结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-22 08:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
邮件今天凌晨已经发送
望查收


——别人的电脑是电脑,偶的电脑咋就是牛车捏


收到  ——ldy




  1. '论坛ID:biaotiger1  ok +3
  2. 'Option Explicit
  3. Function N2Char26R(ByVal L As String) As Double
  4. '你的代码 要求EXCEL2003下可运行
  5. '要求不仅限于 2003的IV(256) 和 2007 的XFD(16384列)
  6. '具体要求请运行 验证1
  7. Dim N As Double, K As Byte, I As Byte, C As Integer
  8. C = Len(L)
  9. For I = 1 To C
  10.     K = Asc(UCase(Mid(L, I, 1))) - 64
  11.     N = N + K * 26 ^ (C - I)
  12. Next
  13. N2Char26R = N
  14. End Function
  15. Function N2Char26(ByVal L As Double) As String
  16. '你的代码 要求EXCEL2003下可运行
  17. '具体要求请运行 验证2
  18. Dim iMod As Integer, sChar As String, K As Integer, X As Integer
  19. Dim Temp As Double, M As Double
  20. iMod = Int(WorksheetFunction.Log(L, 26))
  21. For X = iMod To 0 Step -1
  22.     K = Int(L / 26 ^ X)
  23.     Temp = K * 26 ^ X
  24.     For M = 0 To X - 1
  25.         Temp = Temp + 26 ^ M
  26.     Next M
  27.     If Temp > L Then
  28.             K = IIf(Int(L / 26 ^ X) = 1, 0, K - 1)
  29.     End If
  30.     L = L - K * 26 ^ X
  31.     sChar = sChar & Chr(K + 64)
  32. Next
  33. sChar = IIf(Left(sChar, 1) = "@", Right(sChar, Len(sChar) - 1), sChar)
  34. N2Char26 = sChar
  35. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:09 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-22 08:04 | 显示全部楼层
信已发,请版主查收。



收到  ——ldy



  1. '论坛ID lipton 26的整倍数未通过验证(26=AD  ?) +1 补票 +1
  2. Function N2Char26R(ByVal L As String) As Double
  3.     Dim iMod As Integer, dInt As Double
  4.     Dim i As Byte
  5.     Dim d1 As Double, d2 As Double
  6.     Dim s1 As String
  7.     iMod = Len(L)
  8.     dInt = 0
  9.     d2 = iMod - 1
  10.     For i = 1 To iMod
  11.         s1 = StrConv(Mid(L, i, 1), 1)
  12.         d1 = Asc(s1) - 64
  13.         dInt = dInt + d1 * (26 ^ d2)
  14.         d2 = d2 - 1
  15.     Next
  16.     N2Char26R = dInt
  17. End Function
  18. Function N2Char26(L As Double) As String' 第二次答案正确
  19. Dim iMod As Double, dInt As Double, sChar As String
  20. Dim dblA As Double
  21.         dInt = L
  22.        If dInt = 0 Then
  23.             N2Char26 = ""
  24.             Exit Function
  25.         End If
  26.         
  27.         Do
  28.             iMod = dInt - Fix(dInt / 26) * 26
  29.             dInt = Fix(1 / 26 * dInt)
  30.             If iMod > 0 Then
  31.                 sChar = Chr(iMod + 64) & sChar
  32.             ElseIf dInt > 0 Then
  33.                 dInt = dInt - 1
  34.                 sChar = "Z" & sChar
  35.             End If
  36.         Loop While dInt > 0
  37.     N2Char26 = sChar
  38. End Function

  39. Function N2Char26(L As Double) As String' 第一次答案 26的整倍数未通过验证(26=AD  ?) +1
  40. Dim iMod As Double, dInt As Double, sChar As String
  41. Dim dblA As Double
  42.         iMod = (((L / 10) Mod 26) * 10) Mod 26
  43.         dInt = Fix(1 / 26 * L)
  44.         If iMod > 0 Then
  45.             sChar = Chr(iMod + 64)
  46.         ElseIf dInt > 0 Then
  47.             dInt = dInt - 1
  48.             sChar = "Z"
  49.         End If
  50.         Do While dInt > 0
  51.             iMod = dInt Mod 26
  52.             dInt = Fix(1 / 26 * dInt)
  53.             If iMod > 0 Then
  54.                 sChar = Chr(iMod + 64) & sChar
  55.             ElseIf dInt > 0 Then
  56.                 dInt = dInt - 1
  57.                 sChar = "Z" & sChar
  58.             End If
  59.         Loop
  60.     N2Char26 = sChar
  61. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:10 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-22 14:02 | 显示全部楼层
已经重新发送!

[ 本帖最后由 第Ⅸ夜 于 2009-9-26 12:05 编辑 ]


补答收到,但评分结果没有变化。-ldy



  1. '论坛ID: 第Ⅸ夜 26的整倍数未通过验证(26*2=B@  ?) +1
  2. Function N2Char26R(ByVal L As String) As Double
  3.     Dim i As Integer, j As Integer
  4.     L = UCase(L)
  5.     j = Len(L)
  6.     N2Char26R = 0
  7.     For i = 1 To j
  8.         N2Char26R = (Asc(Mid(L, i, 1)) - 64) * 26 ^ (j - i) + N2Char26R
  9.     Next
  10.     N2Char26R = N2Char26R
  11. End Function
  12. Function N2Char26(ByVal L As Double) As String
  13.     Dim i As Integer, j As Integer, M As Double
  14.     M = L
  15.     j = 1
  16.     N2Char26 = ""
  17.     Do While M / 26 > 1
  18.         M = M / 26
  19.         j = j + 1
  20.     Loop
  21.     If j = 1 Then
  22.         N2Char26 = Chr(L + 64)
  23.     Else
  24.         For i = j To 2 Step -1
  25.             K = Int(L / 26 ^ (i - 1))
  26.             N2Char26 = N2Char26 & Chr(64 + K)
  27.             L = L - 26 ^ (i - 1) * K
  28.         Next i
  29.         N2Char26 = N2Char26 & Chr(L + 64)
  30.     End If
  31. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:10 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-23 11:20 | 显示全部楼层
邮件已发送,请版主查收


收到,只做了题目1 -ldy



  1. '论坛ID: nyafullee  +1
  2. Function N2Char26R(ByVal L As String) As Double
  3. Dim i%, s$, s1$, n#
  4. s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  5. For i = 1 To Len(L)
  6. n = InStr(1, s, Mid(L, i, 1), 1)
  7. s1 = s1 & n & "*26" & Chr(94) & Len(L) - i & "+"
  8. Next
  9. s1 = s1 & "0"
  10. N2Char26R = Application.Evaluate(s1) * 1
  11. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:12 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-23 14:57 | 显示全部楼层
邮件已发送,请查阅.


收到 —ldy



  1. '论坛ID: jmouse  26的整倍数未通过验证(26=A@  ?) +1 补答 正确 +1
  2. Function N2Char26R(ByVal L As String) As Double
  3. '你的代码 要求EXCEL2003下可运行
  4. '要求不仅限于 2003的IV(256) 和 2007 的XFD(16384列)
  5. '具体要求请运行 验证1
  6.     L = UCase(L)
  7.     I = 1
  8.     While L <> ""
  9.         N2Char26R = (Asc(Right(L, 1)) - 64) * I + N2Char26R
  10.         L = Left(L, Len(L) - 1)
  11.         I = I * 26
  12.     Wend
  13. End Function

  14. Function N2Char26(ByVal L As Double) As String'第二次补答 正确
  15. '你的代码 要求EXCEL2003下可运行
  16. '具体要求请运行 验证2
  17.     While L >= 26
  18.         m = L - Int((L / 26)) * 26
  19.         If m = 0 Then
  20.             N2Char26 = "Z" + N2Char26
  21.             L = Int((L / 26)) - 1
  22.         Else
  23.             N2Char26 = Chr(m + 64) + N2Char26
  24.             L = Int((L / 26))
  25.         End If
  26.     Wend
  27.     If L <> 0 Then N2Char26 = Chr(L + 64) + N2Char26
  28. End Function
  29. Function N2Char26(ByVal L As Double) As String'第一次答案 26的整倍数未通过验证(26=A@  ?) +1
  30. '你的代码 要求EXCEL2003下可运行
  31. '具体要求请运行 验证2
  32.     While L >= 26
  33.         m = L - Int((L / 26)) * 26
  34.         N2Char26 = Chr(m + 64) + N2Char26
  35.         L = Int((L / 26))
  36.     Wend
  37.     N2Char26 = Chr(L + 64) + N2Char26
  38. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:12 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-24 10:25 | 显示全部楼层
邮件已发,请楼主查收。


收到 -ldy


  1. '论坛ID:amulee  Ok +3
  2. Function N2Char26R(ByVal L As String) As Double
  3. '你的代码 要求EXCEL2003下可运行
  4. '要求不仅限于 2003的IV(256) 和 2007 的XFD(16384列)
  5. '具体要求请运行 验证1
  6.     Dim i&, StrTemp$
  7.     L = UCase(L)
  8.     For i = 0 To Len(L) - 1
  9.         StrTemp = Mid(L, Len(L) - i, 1)
  10.         N2Char26R = N2Char26R + (Asc(StrTemp) - 64) * 26 ^ i
  11.     Next i
  12. End Function
  13. Function N2Char26(ByVal L As Double) As String
  14. '你的代码 要求EXCEL2003下可运行
  15. '具体要求请运行 验证2
  16.     Dim iMod As Long, dInt As Double, sChar As String
  17.     'Application.Volatile
  18.     dInt = Int(L / 26)
  19.     iMod = L - dInt * 26
  20.     If iMod > 0 Then
  21.         sChar = Chr(64 + iMod)
  22.     ElseIf dInt > 0 Then
  23.         dInt = dInt - 1
  24.         sChar = "Z"
  25.     End If
  26.     Do While dInt > 0
  27.         iMod = dInt - Int(dInt / 26) * 26
  28.         dInt = Int(dInt / 26)
  29.         If iMod > 0 Then
  30.             sChar = Chr(64 + iMod) & sChar
  31.         ElseIf dInt > 0 Then
  32.             dInt = dInt - 1
  33.             sChar = "Z" & sChar
  34.         End If
  35.     Loop
  36.     N2Char26 = sChar
  37. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:13 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-25 11:44 | 显示全部楼层
光顾着验证2了,没注意到那个。。不知道能不能重做的,已经重发答案(手一抖多发一封空信,见谅。。。)

TA的精华主题

TA的得分主题

发表于 2009-9-25 13:41 | 显示全部楼层
中午看看。做第1小题先,捞1分也值得,其他有空再想。答案今晚发送,收下国庆礼包


收到,只做了题目 1 -ldy


  1. '论坛ID: linpansheng 只做了题目1 正确 +1
  2. Function N2Char26R(ByVal L As String) As Double
  3. '    你的代码 要求EXCEL2003下可运行
  4.     Dim i As Double
  5.     Dim B As Double
  6.     L = UCase(L)
  7.     For i = 1 To Len(L)
  8. '    B = B + 26 ^ (i - 1) * (Asc(Mid(L, Len(L) - i + 1, 1)) - 64) ' select case语句可以此代替--ldy
  9.         Select Case Mid(L, Len(L) - i + 1, 1)
  10.             Case "A": B = B + 26 ^ (i - 1) * 1
  11.             Case "B": B = B + 26 ^ (i - 1) * 2
  12.             Case "C": B = B + 26 ^ (i - 1) * 3
  13.             Case "D": B = B + 26 ^ (i - 1) * 4
  14.             Case "E": B = B + 26 ^ (i - 1) * 5
  15.             Case "F": B = B + 26 ^ (i - 1) * 6
  16.             Case "G": B = B + 26 ^ (i - 1) * 7
  17.             Case "H": B = B + 26 ^ (i - 1) * 8
  18.             Case "I": B = B + 26 ^ (i - 1) * 9
  19.             Case "J": B = B + 26 ^ (i - 1) * 10
  20.             Case "K": B = B + 26 ^ (i - 1) * 11
  21.             Case "L": B = B + 26 ^ (i - 1) * 12
  22.             Case "M": B = B + 26 ^ (i - 1) * 13
  23.             Case "N": B = B + 26 ^ (i - 1) * 14
  24.             Case "O": B = B + 26 ^ (i - 1) * 15
  25.             Case "P": B = B + 26 ^ (i - 1) * 16
  26.             Case "Q": B = B + 26 ^ (i - 1) * 17
  27.             Case "R": B = B + 26 ^ (i - 1) * 18
  28.             Case "S": B = B + 26 ^ (i - 1) * 19
  29.             Case "T": B = B + 26 ^ (i - 1) * 20
  30.             Case "U": B = B + 26 ^ (i - 1) * 21
  31.             Case "V": B = B + 26 ^ (i - 1) * 22
  32.             Case "W": B = B + 26 ^ (i - 1) * 23
  33.             Case "X": B = B + 26 ^ (i - 1) * 24
  34.             Case "Y": B = B + 26 ^ (i - 1) * 25
  35.             Case "Z": B = B + 26 ^ (i - 1) * 26
  36.         End Select
  37.     Next i
  38.     N2Char26R = B
  39. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:15 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-25 23:29 | 显示全部楼层
谢谢刘版送分,这次检大便宜了,,哇哈哈!!

TA的精华主题

TA的得分主题

发表于 2009-9-26 12:29 | 显示全部楼层
先占位, 晚上再发邮件


收到, -ldy



  1. '论坛ID: kowloon  结果正确,速度未达标 +2
  2. Function N2Char26R(ByVal L As String) As Double
  3.     L = UCase(L)
  4.     S = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  5.     N2Char26R = 0
  6.     For i = Len(L) To 1 Step -1
  7.         j = InStr(S, Mid(L, i, 1))
  8.         If j = 0 Then
  9.             Error 0
  10.             Exit Function
  11.         Else
  12.             N2Char26R = N2Char26R + j * 26 ^ (Len(L) - i)
  13.         End If
  14.     Next
  15. End Function
  16. Function N2Char26(ByVal L As Double) As String
  17.     Dim ar(0 To 10, 1 To 2)
  18.     Dim a, a1, LL, LLL
  19.     For a = 0 To 10
  20.         ar(a, 1) = 26 ^ a
  21.         a1 = a1 + 26 ^ a
  22.         ar(a, 2) = a1 - 1
  23.         If L < a1 Then
  24.             L1 = a
  25.             Exit For
  26.         End If
  27.     Next
  28.     For i = L1 To 1 Step -1
  29.         LL = L - ar(i - 1, 2)
  30.         LLL = WorksheetFunction.RoundUp(LL / ar(i - 1, 1), 0)
  31.         N2Char26 = N2Char26 & Chr(64 + LLL)
  32.         L = L - ar(i - 1, 1) * LLL
  33.     Next
  34. End Function
复制代码

[ 本帖最后由 ldy 于 2009-10-21 17:16 编辑 ]

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 16:03 , Processed in 0.048045 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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