Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 学习学习vba

[已解决]vba代码 怎么随机取值 有关ASCII码的 ? 20楼有运算过程

[复制链接]
发表于 2015-1-15 13:18 | 显示全部楼层
问题讲清楚了,解决就非常容易。
  1. Function f(x, Optional k = 0)
  2.     Application.Volatile
  3.     x = "&H" & x: y = x Mod "&HC" + "&HC" * "&H19"
  4.     If k Then f = Hex(y): Exit Function
  5.    
  6.     s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7.     f = "09AZ"
  8.     Do
  9.         h = 0
  10.         For i = 1 To 4
  11.             r = Int(Rnd * 36): Mid(f, i, 1) = Mid(s, r + 1, 1)
  12.             h = h + r + IIf(r < 10, 48, 55)
  13.         Next
  14.         If h = y Then Exit Do
  15.     Loop
  16. End Function
复制代码

help.zip

8.7 KB, 下载次数: 3

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2015-1-15 13:35 | 显示全部楼层
代码复杂一点,再加一个4个字符ASCII码值的验算功能:
  1. Function f(x, Optional k = 0)
  2.     Application.Volatile
  3.     If k Then
  4.         If k = 1 Then
  5.             x = "&H" & x: y = x Mod "&HC" + "&HC" * "&H19"
  6.         Else
  7.             For j = 1 To 4
  8.                 y = y + Asc(Mid(x, j, 1))
  9.             Next
  10.         End If
  11.         f = Hex(y): Exit Function
  12.     End If
  13.    
  14.     x = "&H" & x: y = x Mod "&HC" + "&HC" * "&H19"
  15.     s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  16.     f = "09AZ"
  17.     Do
  18.         h = 0
  19.         For j = 1 To 4
  20.             r = Int(Rnd * 36): Mid(f, j, 1) = Mid(s, r + 1, 1)
  21.             h = h + r + IIf(r < 10, 48, 55)
  22.         Next
  23.         If h = y Then Exit Do
  24.     Loop
  25. End Function
复制代码

help.zip

9.72 KB, 下载次数: 0

回复

使用道具 举报

发表于 2015-1-15 13:44 | 显示全部楼层    本楼为最佳答案   
代码又做了改进,随机计算只需前3位,然后判断第4位是否符合即可。
这样的计算效率更高。
  1. Function f(x, Optional k = 0)
  2.     Application.Volatile
  3.     If k Then
  4.         If k = 1 Then
  5.             x = "&H" & x: y = x Mod "&HC" + "&HC" * "&H19"
  6.         Else
  7.             For j = 1 To 4
  8.                 y = y + Asc(Mid(x, j, 1))
  9.             Next
  10.         End If
  11.         f = Hex(y): Exit Function
  12.     End If
  13.    
  14.     x = "&H" & x: y = x Mod "&HC" + "&HC" * "&H19"
  15.     s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  16.     f = "09AZ"
  17.     Do
  18.         h = y
  19.         For j = 1 To 3
  20.             r = Int(Rnd * 36): Mid(f, j, 1) = Mid(s, r + 1, 1)
  21.             h = h - r - IIf(r < 10, 48, 55)
  22.         Next
  23.         If 48 <= h And h <= 57 Then Mid(f, j, 1) = h - 48: Exit Do
  24.         If 65 <= h And h <= 90 Then Mid(f, j, 1) = Chr(h): Exit Do
  25.     Loop
  26. End Function
复制代码

help.zip

9.87 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2015-1-15 14:56 | 显示全部楼层
经测试...得到的结果通过验证..
非常棒

谢谢老师
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 16:33 , Processed in 0.486339 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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