我正在编写一个VBA代码,以将+2添加到该函数中放置的任何数字字符串中。
它工作正常,直到达到6和7,然后它破裂。我真的不知道为什么会这样。
如果您想知道为什么要这样做,这是加密算法的一部分,它专门用于加密字符串中的数字。
我的代码是:
Sub AddNumbers()
Dim Nos As String
Dim AddNo As String
Dim Found As Boolean
Dim Split()
Nos = "0-1-2-3-4-5-6-7-8-9-10"
Sheets("Sheet1").Range("U2").Value = Nos
Length = Len(Nos)
ReDim Split(Length)
For i = 1 To Length
Found = False
Split(i) = Mid(Nos, i, 1)
For O = 48 To 55
If Split(i) = Chr(O) Then
Split(i) = Chr(O + 2)
Found = True
Exit For
End If
Next O
If Split(i) = Chr(56) Then
Split(i) = Chr(48)
ElseIf Split(i) = Chr(57) Then
Split(i) = Chr(49)
End If
Next i
AddNo = Join(Split, "")
Sheets("Sheet1").Range("U3").Value = AddNo
End Sub
我真的很想知道为什么它会在6和7时突破。
答案 0 :(得分:3)
使用实际功能Split
:
Sub AddNumbers()
Dim Nos As String
Dim AddNo As String
Dim Found As Boolean
Dim SplitStr() As String
Nos = "0-1-2-3-4-5-6-7-8-9-10"
Sheets("Sheet1").Range("U2").Value = Nos
SplitStr = Split(Nos, "-")
Dim i As Long
For i = LBound(SplitStr) To UBound(SplitStr)
Dim vlue As String
vlue = StrConv(SplitStr(i), vbUnicode)
Dim substr() As String
substr = Split(Left(vlue, Len(vlue) - 1), vbNullChar)
Dim j As Long
For j = LBound(substr) To UBound(substr)
Select Case substr(j)
Case 8
substr(j) = 0
Case 9
substr(j) = 1
Case Else
substr(j) = substr(j) + 2
End Select
Next j
SplitStr(i) = Join(substr, "")
Next i
AddNo = Join(SplitStr, "-")
Sheets("Sheet1").Range("U3").Value = AddNo
End Sub
答案 1 :(得分:3)
花点时间,但您正在加倍。
看看你的循环。当您遇到6(Char(54)
)时,将2加8(Char(56)
)。
但是,循环之后,您将再次测试相同的Split(i)
。 6和7的字符数现在分别为56和57-因此您要向其添加另外2个字符。
If Split(i) = Chr(56) And Found = False Then
Split(i) = Chr(48)
ElseIf Split(i) = Chr(57) And Found = False Then
Split(i) = Chr(49)
End If
答案 2 :(得分:0)
总体问题是您将Chr码用于数字而非实际数字。此方法仅返回1位数字,因为Chr()引用单个字符的列表。
您将需要使用Split(mySplit = Split(Nos,“-”))返回每个数字并使用它们。
行
If Split(i) = Chr(56) Then
Split(i) = Chr(48)
ElseIf Split(i) = Chr(57) Then
Split(i) = Chr(49)
End If
让我感到困惑。您是说值是“ 8”更改为“ 0”,如果值是“ 9”更改为“ 1”
答案 3 :(得分:0)
这是另一种方法:
Sub AddNumbers()
Dim Nos As String, Nos2 As String
Dim NumSplit As Variant
Dim Num As Variant
Dim tmp As String
Dim i As Long
Nos = "0-1-2-3-4-5-6-7-8-9-10"
Sheets("Sheet1").Range("U2").Value = Nos
NumSplit = Split(Nos, "-")
For Each Num In NumSplit
For i = 1 To Len(Num)
tmp = tmp & Mid(Num, i, 1) + 2
Next i
Nos2 = Nos2 & tmp & "-"
tmp = ""
Next Num
Nos2 = Left(Nos2, Len(Nos2) - 1)
Sheets("Sheet1").Range("U3").Value = Nos2
End Sub
有点混乱,但是显示了将原始数组拆分为单独数字的基本思想。
For....Next
循环内的For...Each
循环可处理超过一位(给出32)的任何数字。