2014-02-20 2 views
-1

저는 Excel VBA의 초보자이며 이름과 전화 번호가 포함 된 열에서 셀을 몇 개 가져 와서 전화 번호를 잘라냅니다. 그 셀을 다른 열에 붙여 넣으면 이름이있는 셀 하나와 숫자가있는 셀이 생깁니다.한 셀에서 다른 셀로 문자를 이동하면 무한 루프가 발생합니다.

무엇인가의 이유로 내 프로그램이 무한 루프로 진행됩니다.

나는 그것이 sLen = sLen - 1 & j = j - 1에 의해 발생했는지 확신하지만, 어떻게 해결해야할지 모르겠다.

for j = sLen to 1 step -1 

지금 당신이 그것을 줄 J = J-1을 ommit 수 : 대신 오른쪽과 같이 오른쪽 또는 왼쪽으로 이동 왼쪽 갈 수 있도록 J를 조작 주위에 너무 장난의

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

'sLen = sLen-1' 및'j = j-1' 행을 삭제하십시오. 코드는 예상대로 작동해야합니다. Btw, Cells (rowNum, 2) = Mid (Cells (rowNum, 2), j, 1)'숫자 또는'-'을 제거하지 않고 대신이 문자 만 남김 –

+1

셀이 제거 중입니다. 그러나 그것은 당신이 쓴 두 번째 이유 때문일 수 있습니다. 나는 그것을 고치려고 노력할 것이다. – ubonozur

답변

0

더 이상이 문제를주지 않을 것입니다.

문자열이나 데이터 세트에서 항목을 제거 할 때 항상 처음부터 시작하여 루프를 진행하는 변수를 조작하는 것보다 훨씬 쉽습니다.

이 예제에서는 Regexp (정규 표현식)을 사용해 본적이 있습니다. 이전에는 사용하지 않았지만 문자열 내에서 숫자 문자열을 찾을 수 있습니다. SO에서 regexp를 검색하면 코드를 찾을 수 있습니다.

관련 문제