ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [53期国庆附加题] 玩转 N 进制 -----------已结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-24 10:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
跟贴占位……邮件已发。第二次的稍稍修改了下,请24号晚邮件为准

[ 本帖最后由 joforn 于 2009-9-24 21:09 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-9-24 10:35 | 显示全部楼层
邮件已发, 查收
多次运行,对话框显示的指数变化较大,就不传图片了

这次不会有“坑”了吧


收到 -ldy

TA的精华主题

TA的得分主题

发表于 2009-9-24 21:29 | 显示全部楼层
邮件已经重发了,请查收。
不过这个题不允许使用API,使得速度上慢了很多,有时间做个速度版试试,看看到底能快多少。呵



收到 -ldy




  1. 'ID:   Joforn OK +2
  2. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String
  3.     '作用:将Long值转换为 N 进制所表示的字符串
  4.     '参数说明 L 要转换的值, N (2-36) 将要使用的进制数
  5.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6.     Dim I As Long, dNum As Double, dDIV As Double, dMod As Long
  7.     Dim sRET As String
  8.    
  9.     If (N < 2) Or (N > Len(Jzs)) Then Exit Function
  10.     Select Case N
  11.       Case 8:       N2ChrX = Oct(L)
  12.       Case 10:      N2ChrX = L
  13.       Case 16:      N2ChrX = Hex(L)
  14.       Case Else:
  15.         sRET = String(32, vbNullChar)
  16.         If L < 0 Then
  17.           dNum = 2147483648# + (L And &H7FFFFFFF)
  18.         Else
  19.           dNum = L
  20.         End If
  21.         Do
  22.           If dNum > &H7FFFFFFF Then
  23.             I = I + 1
  24.             dDIV = Fix(dNum / N)
  25.             dMod = dNum - dDIV * N + 1
  26.             dNum = dDIV
  27.             Mid(sRET, I, 1) = Mid(Jzs, dMod, 1)
  28.           Else
  29.             L = dNum: dNum = 0
  30.             Do
  31.               I = I + 1
  32.               dMod = (L Mod N) + 1
  33.               L = L \ N
  34.               Mid(sRET, I, 1) = Mid(Jzs, dMod, 1)
  35.             Loop While L > 0
  36.           End If
  37.         Loop While dNum > 0
  38.         N2ChrX = StrReverse(Mid(sRET, 1, I))
  39.     End Select
  40. End Function

  41. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long
  42.     '作用:字符串值转换为 N 进制所表示的字符串
  43.     '参数说明 S 要转换的N进制字符串, N (2-36) 对S变量进制数的说明
  44.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  45.     Dim I As Long, K As Long, dNum As Double
  46.    
  47.     K = Len(S)
  48.     If (N < 2) Or (N > Len(Jzs)) And (K = 0) Then Exit Function
  49.     Select Case N
  50.       Case 8:       ChrX2N = Val("&O" & S)
  51.       Case 10:      ChrX2N = Val(S)
  52.       Case 16:      ChrX2N = Val("&H" & S)
  53.       Case Else:
  54.         S = UCase(S)
  55.         For I = 1 To Len(S)
  56.           K = InStr(Jzs, Mid(S, I, 1))
  57.           Select Case K
  58.             Case 1 To N:    dNum = dNum * N + K - 1
  59.             Case Else:      Exit For
  60.           End Select
  61.         Next I
  62.         If dNum > 4294967295# Then
  63.           Exit Function
  64.         ElseIf dNum > &H7FFFFFFF Then
  65.           K = dNum - 2147483648#
  66.           ChrX2N = K Or &H80000000
  67.         Else
  68.           ChrX2N = dNum
  69.         End If
  70.     End Select
  71. End Function
复制代码

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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-25 10:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
邮件已发送,请版主查收。


收到 -ldy




  1. '【alzeng】:  OK  +2

  2. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String
  3.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4.     Dim k As Byte, i As Byte, M#

  5.     If N = 10 Then
  6.         N2ChrX = L
  7.     Else
  8.         M = (L - 2 ^ 32 * (L < 0)) / 10
  9.         i = (M - Int(M / (N / 10)) * N / 10) * 10 Mod N
  10. '用这种折中的方法 避开 MOD 不能处理大数的问题,优化后可以完全不用MOD  -ldy
  11.         Do Until N ^ k / 10 > M
  12.             k = k + 1
  13.         Loop

  14.         N2ChrX = Mid(Jzs, i + 1, 1)
  15.         M = M - (i - 1) / 10
  16.         For i = 2 To k
  17.             N2ChrX = Mid(Jzs, Int((M / N ^ (i - 1)) * 10) Mod N + 1, 1) & N2ChrX
  18.         Next
  19.     End If
  20. End Function

  21. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long'思路清晰,正解
  22.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  23.     S = UCase(S)

  24.     Dim i As Byte, M#
  25.     If N = 10 Then
  26.         ChrX2N = S
  27.     Else
  28.         For i = 1 To Len(S)
  29.             M = M + (InStr(Jzs, Mid$(S, i, 1)) - 1) * N ^ (Len(S) - i)
  30.         Next

  31.         ChrX2N = M + 2 ^ 32 * (M >= 2 ^ 31)
  32.     End If
  33. End Function
复制代码

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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-25 18:44 | 显示全部楼层
版主好,邮件已发送,谢谢给我们机会练习!
效率指数:23200之内 可以结受
效率指数低的时候22,高的时候37,没有超过40,不知到波动为什么这么大!


收到 -ldy


  1. 'ID: trustwxq  Ok +2
  2. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String
  3.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4.     Dim aa As Double, bb As Double, result As String
  5.     bb = L
  6.     If L < 0 And N <> 10 Then
  7.         bb = 4294967296# + L
  8.     End If
  9.     result = ""
  10.     If N <> 10 Then
  11.         Do While bb > N
  12.             aa = Int(bb / N)
  13.             aa = bb - aa * N
  14.             bb = Int(bb / N)
  15.             result = Mid(Jzs, aa + 1, 1) & result
  16.         Loop
  17.     End If
  18.     If N = 10 Then
  19.         result = L
  20.     ElseIf bb = N Then
  21.         result = "10" & result
  22.     Else
  23.         result = Mid(Jzs, bb + 1, 1) & result
  24.     End If
  25.     N2ChrX = result
  26. End Function
  27. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long
  28.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  29.     S = UCase(S)
  30.     Dim LL1 As Integer, LL2 As Integer, chr1 As String, result2 As Double
  31.     If S = "" Then
  32.         S = 0
  33.     End If
  34.     result2 = 0
  35.     If N <> 10 Then
  36.         For LL1 = 1 To Len(S)
  37.             chr1 = Mid(S, LL1, 1)
  38.             
  39.             If Asc(chr1) >= Asc("0") And Asc(chr1) <= Asc("9") Then
  40.                 LL2 = chr1
  41.             ElseIf Asc(chr1) >= Asc("A") And Asc(chr1) <= Asc("Z") Then
  42.                 LL2 = Asc(chr1) - Asc("A") + 10
  43.             End If
  44.           ' LL2 = InStr(Jzs, chr1) - 1
  45.    '有常量不用,却用Asc 舍近求远的做法,改为 LL2 = InStr(Jzs, chr1) - 1 提速1倍 --ldy
  46.   
  47.             result2 = result2 + LL2 * N ^ (Len(S) - LL1)
  48.         Next
  49.         If result2 > 2147483647 Then
  50.             ChrX2N = result2 - 4294967296#
  51.         Else
  52.             ChrX2N = result2
  53.         End If
  54.     Else
  55.         ChrX2N = --S
  56.     End If
  57. End Function
复制代码

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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-27 10:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
已经发送邮件,请查收。

另,1楼的“自检”代码中,数组中的最后两个值我觉得应该是下面这样吧

    Lrr(1001) = -2147483648#
    Lrr(1002) = 2147483647

收到 -谢谢提醒 ,手误,已在 一楼修改  -ldy



  1. '论坛ID: taller  ok  +2  思路清晰,正解。
  2. ' 优化 :之前有 Ucase转换,instr函数第三个参数 vbTextCompare 省略掉快一倍以上
  3. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String
  4. '作用:将double值转换为 N 进制所表示的字符串
  5. '参数说明 L 要转换的值, N (2-36) 将要使用的进制数
  6.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7.     Dim Num As Double, iMod As Integer, sLen As Integer
  8.     If N = 10 Then
  9.         N2ChrX = VBA.CStr(L)
  10.     Else
  11.         Num = L
  12.         If L < 0 Then
  13.             Num = L + 2 ^ 32
  14.         ElseIf L = 0 Then
  15.             N2ChrX = "0"
  16.             Exit Function
  17.         End If
  18.         Do While Num > 0
  19.             iMod = Num - VBA.Int(Num / N) * N + 1
  20.             N2ChrX = VBA.Mid$(Jzs, iMod, 1) & N2ChrX
  21.             Num = VBA.Int(Num / N)
  22.         Loop
  23.     End If
  24. End Function
  25. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long
  26. '作用:字符串值转换为 N 进制所表示的字符串
  27. '参数说明 S 要转换的N进制字符串, N (2-36) 对S变量进制数的说明
  28.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  29.     Dim iLen As Integer, Num As Double, lbit As Integer
  30.     If N = 10 Then
  31.         ChrX2N = VBA.CLng(S)
  32.     Else
  33.         S = VBA.UCase(S): iLen = VBA.Len(S)
  34.         For j = 0 To iLen - 1
  35.             i = VBA.InStr(1, Jzs, Mid$(S, iLen - j, 1), vbTextCompare) - 1
  36.             Num = Num + i * (N ^ j)
  37.         Next j
  38.         If Num > 2147483647 Then
  39.             ChrX2N = Num - 2 ^ 32
  40.         Else
  41.             ChrX2N = Num
  42.         End If
  43.     End If
  44. End Function
复制代码

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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-27 11:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
刚发现一楼代码后面还有一段自检的程序
这两天没时间哦,怕十一还要加班

我的分分哦,离我而去要

TA的精华主题

TA的得分主题

发表于 2009-9-28 08:26 | 显示全部楼层
重新发送,请斑竹费心审阅

谢谢
自检时间依然不稳定,有时候137.8,有时候173.5,有时候200出头,有时候快300了



收到 -ldy



  1. '论坛ID:biaotiger1  Ok +2  但负数转换太慢

  2. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String
  3.     '作用:将Long值转换为 N 进制所表示的字符串
  4.     '参数说明 L 要转换的值, N (2-36) 将要使用的进制数
  5.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6.     Dim A As Integer, bStr As String, nStr As String, LL As Double
  7.     Dim C As Byte, D As Byte, bStr1 As String
  8.     If N = 10 Then nStr = L: GoTo 1
  9.     If L < 0 Then
  10.         '如果为负数,将其转变换为正数
  11.         LL = -CDbl(L)
  12.         '将正数L转换为二进制
  13.         Do
  14.             A = LL - 2 * Int(LL / 2)
  15.             bStr = Mid(Jzs, A + 1, 1)
  16.             nStr = bStr & nStr
  17.             LL = Int(LL / 2)
  18.         Loop Until LL = 0
  19.         
  20.         '将二进制取反 并+1
  21.         bStr = "": C = Len(nStr)
  22.         For A = C To 1 Step -1
  23.             If A = C Then D = 1 Else D = 0
  24.             bStr = 1 + D - Mid(nStr, A, 1) & bStr
  25.         Next A
  26.             bStr = String(32 - C, "1") & bStr
  27.         
  28.         '将其转换为十进制
  29.         LL = 0
  30.         For A = 1 To 32
  31.             LL = LL + Mid(bStr, A, 1) * 2 ^ (32 - A)
  32.         Next A
  33.     Else
  34.         LL = L
  35.     End If
  36.         '将正数转换为N进制
  37.     nStr = "": bStr = ""
  38.     Do
  39.         A = LL - N * Int(LL / N)
  40.         bStr = Mid(Jzs, A + 1, 1)
  41.         nStr = bStr & nStr
  42.         LL = Int(LL / N)
  43.     Loop Until LL = 0
  44. 1:
  45.    
  46.     N2ChrX = nStr
  47. End Function
  48. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long
  49.     '作用:转换N进制字符串 为 Long值
  50.     '参数说明 S 要转换的N进制字符串, N (2-36) 对S变量进制数的说明
  51.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  52.     'Const MaxLong As Long = 2147483647
  53.     S = UCase(S)
  54.     Dim bStr As String, nStr As String, LL As Double
  55.     Dim C As Integer, D As Byte, A As Byte, B As Byte, L As Long, MaxLong As Long
  56.    
  57.     '将N进制转换为十进制
  58.     If N = 10 Then LL = S: GoTo 1
  59.     D = Len(S)
  60.     For C = 1 To D
  61.         A = InStr(1, Jzs, Mid(S, C, 1)) - 1
  62.         LL = LL + A * N ^ (D - C)
  63.     Next C
  64.     MaxLong = 2147483647
  65.     If LL > MaxLong Then
  66.         
  67.         'LL为负数
  68.         '将ll转换为二进制
  69.         Do
  70.             A = LL - 2 * Int(LL / 2)
  71.             bStr = Mid(Jzs, A + 1, 1)
  72.             nStr = bStr & nStr
  73.             LL = Int(LL / 2)
  74.         Loop Until LL = 0
  75.         '反码,补码
  76.         bStr = "": D = IIf(InStr(1, nStr, "0") = 0, 32, InStr(1, nStr, "0"))
  77.         For C = 32 To D Step -1
  78.             If C = 32 Then A = 1 Else A = 0
  79.             A = 1 + A - Mid(nStr, C, 1)
  80.             bStr = Mid(Jzs, A + 1, 1) & bStr
  81.         Next C
  82.         
  83.         '将二进制转换为十进制
  84.         LL = 0: C = Len(bStr)
  85.         For A = 1 To C
  86.             LL = LL + Mid(bStr, A, 1) * 2 ^ (C - A)
  87.         Next A
  88.         
  89.         LL = -LL
  90.     End If
  91. 1:
  92.     ChrX2N = LL
  93.    
  94. End Function
复制代码

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

本帖子中包含更多资源

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

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-28 08:38 | 显示全部楼层
原帖由 泓() 于 2009-9-26 19:19 发表
修正了(优化后的)一个bug
请刘版 查收





收到 -ldy



  1. '论坛ID:泓() 结果正确,+2 但处理负数效率太低。N10toCX 多余且绕弯
  2. '一个清如水,一个乱如泥,老兄在玩冰火两重天?
  3. Function N10toCX(ByVal L As Long, ByVal N As Integer) As String
  4. '正十进制 转 N进制
  5.     Dim v As Long
  6.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7.     If L = 0 Then N10toCX = 0: Exit Function
  8.     Do While L > 0
  9.         v = L - Int(L / N) * N + 1
  10.         N10toCX = Mid$(Jzs, v, 1) & N10toCX
  11.         L = Int(L / N)
  12.     Loop
  13. End Function
  14. Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String' 乱,但居然对了,太神奇了
  15. '作用:将Long值转换为 N 进制所表示的字符串
  16. '参数说明 L 要转换的值, N (2-36) 将要使用的进制数
  17.     Dim i As Long, j As Long, S As String, t As String, Ls As Long, Ss As String
  18.     Dim F As String, Z As String, b As Long, c As Long, d As Long, H() As Variant
  19.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  20.     If Not (N >= 2 And N <= 36) Then Exit Function
  21.     If N = 10 Then N2ChrX = CStr(L): Exit Function    '若十进制 没必要进一步转化
  22.     If L > -1 Then
  23.         N2ChrX = N10toCX(L, N)
  24.         Exit Function    '正十进制转 N进制后 直接退出
  25.     End If
  26.     '------以下代码针对 负数 转化------
  27.     S = N10toCX(2147483647, N)    '转化Long最大值2147483647 N进制中的值
  28.     Ls = Len(S)
  29.     For i = Ls To 1 Step -1
  30.         j = j + 1: t = Mid$(S, i, 1)
  31.         If InStr(Jzs, t) < N Then Ss = Left(S, Ls - j) & _
  32.            Mid$(Jzs, InStr(Jzs, t) + 1, 1) & Application.Rept(0, j - 1): Exit For
  33.     Next
  34.     If Ss = Empty Then Ss = 1 & Application.Rept(0, Ls)
  35.     F = Ss    '+1 计算Long最小值 -2147483648 N进制值
  36.     L = 2147483647 + L + 1    'L =:原始值L与 最小值-2147483648 的相差值(10进制中的相差)
  37.     Z = N10toCX(L, N)    '十进制中的相差值转为 N进制值
  38.     Z = Application.Rept(0, Len(F) - Len(Z)) & Z
  39.     '以下代码是N进制的加法运算: N进制相差值 + N进制最小值 = 负十进制L转为 N进制值
  40.     ReDim H(0 To Len(F)) As Variant
  41.     For i = Len(F) To 1 Step -1
  42.         b = InStr(Jzs, Mid$(Z, i, 1)) - 1
  43.         c = InStr(Jzs, Mid$(F, i, 1)) - 1
  44.         d = b + c + H(i)
  45.         If d < N Then
  46.             H(i) = Mid$(Jzs, d + 1, 1)
  47.         Else
  48.             H(i - 1) = d \ N
  49.             H(i) = Mid$(Jzs, d Mod N + 1, 1)
  50.         End If
  51.     Next
  52.     S = Empty
  53.     For i = 0 To UBound(H)
  54.         S = S & H(i)
  55.     Next
  56.     N2ChrX = S
  57. End Function
  58. Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long '这个思路清晰,正解,上面的咋那么乱?
  59. '作用:字符串值转换为 N 进制所表示的字符串
  60. '参数说明 S 要转换的N进制字符串, N (2-36) 对S变量进制数的说明
  61.     Dim i As Long, v As Double, Ls As Long, im As Long
  62.     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  63.     S = UCase(S)
  64.     If Not (N >= 2 And N <= 36) Then Exit Function
  65.     If N = 10 Then ChrX2N = CLng(S): Exit Function
  66.     Ls = Len(S)
  67.     For i = Ls To 1 Step -1
  68.         im = InStr(Jzs, Mid$(S, i, 1))
  69.         If im = 0 Then Exit Function
  70.         v = v + (im - 1) * N ^ (Ls - i)
  71.     Next
  72.     If v > 2147483647 Then v = v - 2147483648# * 2
  73.     ChrX2N = v
  74. End Function
复制代码

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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-29 23:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
版主:我赶了一个末班车,2009.9.29 23:07发出
请查收
您的所有要求我全部测试正确,包括边界值

[ 本帖最后由 smhf_6 于 2009-9-29 23:10 编辑 ]
Function N2ChrX(ByVal L As Long, ByVal N As Integer) As String  ' 10进制->n进制
    '作用:将Long值转换为 N 进制所表示的字符串,Long 值范围(-2147483648  到 2147483647)
    '参数说明 L 要转换的值, N (2-36) 将要使用的进制数
     Dim I As Integer
     Dim res As Integer
     Dim S As String
     Dim sb
     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If N = 10 Then
S = L
Else
     If L > 0 Then
        Do While L <> 0
        res = L Mod N
        S = Mid(Jzs, res + 1, 1) & S
        L = L \ N
        Loop
     ElseIf L = 0 Then
        S = 0
     Else
        sb = 2 ^ 32 + L
   
        Do While sb <> 0
        res = sb - Int(sb / N) * N
        S = Mid(Jzs, res + 1, 1) & S
        sb = Int(sb / N)
        Loop
    End If
End If
N2ChrX = S

End Function

Function ChrX2N(ByVal S As String, ByVal N As Integer) As Long  'n进制->10进制
    '作用:字符串值转换为 N 进制所表示的字符串
    '参数说明 S 要转换的N进制字符串, N (2-36) 对S变量进制数的说明
     Dim I As Integer
     Dim ml As Long
     Dim mml
     Dim res As Integer
     Dim sb
     Const Jzs As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     S = UCase(S)
  If N = 10 Then
  ml = S
  Else
  
     If S = "0" Then
     ml = 0
     Else
     For I = 1 To Len(S)
     mml = mml + (InStr(Jzs, Mid(S, I, 1)) - 1) * N ^ (Len(S) - I)
                                                                  
     Next
        If mml <= 2147483647 Then
        ml = mml
        Else
        ml = mml - 2 ^ 32
        End If
     End If
End If
    ChrX2N = ml           '

End Function


没有收到,你可以发短信给我 -ldy  2009-9-30

[ 本帖最后由 smhf_6 于 2009-10-21 19:52 编辑 ]

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-21 19:42 , Processed in 0.039352 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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