首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA生成代码

VBA生成代码
EN

Stack Overflow用户
提问于 2018-04-16 13:44:18
回答 2查看 67关注 0票数 2

那里。我编写的代码替换了两个数字的字符(例如0= 10;1= 11;2= 12;.)除了第一个元素(零元素),一切都很好。因此,如果我在单元格A1上放置"010a4“字符串,并使用我的公式"=GENERATECODE(A1)",我的预期返回值是"1011102014”,但我有一个"110111102014“字符串。所以,只有零值才会出现这个错误,我不知道为什么。有什么想法吗?

我的代码:

代码语言:javascript
复制
    Function GENERATECODE(Code As String)
    Dim A As String
    Dim B As String
    Dim i As Integer
    Const AccChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Const RegChars = "1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071"
    For i = 1 To Len(AccChars)
        A = Mid(AccChars, i, 1)
        B = Mid(RegChars, 2 * i - 1, 2)
        Code = Replace(Code, A, B)
    Next
    GENERATECODE = Code
End Function
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-16 14:22:54

除了不正确之外,您当前的代码效率很低,因为它需要多次扫描代码字符串,而不是只扫描一次。只需扫描一次字符串,将替换收集到一个数组中,该数组在末尾被连接:

代码语言:javascript
复制
Function GENERATECODE(Code As String) As String
    Dim codes As Variant
    Dim i As Long, n As Long
    Dim c As String
    n = Len(Code)
    ReDim codes(1 To n)
    For i = 1 To n
        c = Mid(Code, i, 1)
        Select Case c
            Case "0" To "9":
                codes(i) = "1" & c
            Case "a" To "z":
                codes(i) = Asc(c) - 77
            Case "A" To "Z":
                codes(i) = Asc(c) - 19
            Case Else:
                codes(i) = "??"
        End Select
    Next i
    GENERATECODE = Join(codes, "")
End Function

示例:

代码语言:javascript
复制
?generatecode("010a4")
1011102014

这两个偏移的要点是,您希望"a“映射到20,"A”映射到46。注意Asc("a") - 77 = 97 - 77Asc("A") - 19 = 65-19 = 46

票数 1
EN

Stack Overflow用户

发布于 2018-04-16 14:12:57

您的问题是,您的代码首先将每个0更改为10,然后将每个1更改为11。所以每个0给你10,然后是110

如果您想保持相同的算法(这可能不是一个好的选择),那么您需要更改AccCharsRegChars,以便一个字符永远不会被一个可以给出稍后在AccChars字符串上找到的字符的字符串所取代。在您的情况下,只需将Const AccChars = "012 ...替换为Const AccChars = "102 ...,将Const RegChars = "101112 ...替换为Const RegChars = "111012 ...

但是最好完全改变你的算法。我首先建议不要使用字符串的就地编辑,而是使用2个string。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49858828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档