我是Excel VBA的新手,我需要做的是在列中包含一些包含姓名和电话号码的单元格,并将电话号码从该单元格中删除并粘贴到另一列中,这样我将有一个带有名称的单元格和另一个带有数字的单元格。
出于某种原因,我的程序进入无限循环。
我很确定它是由sLen = sLen - 1
& j = j - 1
但我不知道如何解决它。
Sub loop_macro()
Dim myStr As String
Dim i As Integer
For i = 5 To 15
myStr = movePhone(Cells(i, 2), i)
Cells(i, 5) = myStr
Next i
End Sub
Function movePhone(s As String, rowNum As Integer) As String
Dim retval As String // This is the return string to be copied to column 5
Dim j As Integer // Counter for character position.
Dim sLen As Integer
retval = ""
sLen = Len(s)
For j = 1 To sLen
If Mid(s, j, 1) >= "0" And Mid(s, j, 1) <= "9" Then
retval = retval + Mid(s, j, 1)
Cells(rowNum, 2) = Mid(Cells(rowNum, 2), j, 1) // remove digit from cell
sLen = sLen - 1
j = j - 1
ElseIf Mid(s, j, 1) = "-" Then
retval = retval + Mid(s, j, 1)
Cells(rowNum, 2) = Mid(Cells(rowNum, 2), j, 1) // remove "-" char from cell
sLen = sLen - 1
j = j - 1
End If
Next
movePhone = retval
End Function
答案 0 :(得分:0)
不要因为操纵J而乱搞这么多,所以你可以从左到右,从右到左,如下:
for j = sLen to 1 step -1
现在你可以省略j = j-1行,它将不再给你这个问题。
总是从最后开始,在从字符串甚至数据集中删除东西时开始工作,这比操作循环变量要容易得多。
在这种情况下,您应该考虑使用Regexp(正则表达式)我之前没有使用它们,但是它们会在字符串中找到数字字符串(如果需要,还可以找到更多)。搜索SO以获取正则表达式,您将找到大量代码来帮助您。