2016-06-30 1 views
3

범위의 모든 셀을 검색하는 코드를 작성하고 있습니다. 2 자 이하의 값 (예 : "12" "ab")을 모두 찾은 다음 해당 셀을 삭제하고 싶습니다. 나는 일종의 일을하지만, VBA 코드는 매우 느리게 실행되며 실행 당 1 열만 작동합니다.VBA의 루프에 문제가 있습니다.

Sub test2() 
Dim i As Integer 
Dim j As Integer 

For i = 1 To 524 
    For j = 1 To 12 
     If Len(Cells(i, j)) <= 2 Then 
      Cells(i, j).Delete Shift:=xlToLeft 
     End If 
    Next j 
Next i 
End Sub 
+1

이 범위이므로 '설정 R = 범위 (l524 "A1)을 사용하여 (r.value) <= 2 then cell.delete' –

+0

열 단위로 작업 한 다음 행 단위로 작업한다는 점에 주목하십시오. 행 524에서 코드가 끝나면 다른 열로 이동하지 않습니다. 그것은'for each row..for each row ... for for 루프'타입 루프입니다. – Dave

+0

셀을 삭제하고 왼쪽으로 이동하면 오른쪽 열의 셀이 그 위치로 이동합니다. 이것은 코드가 이미 I/J 좌표에서 셀을 "처리"했으므로 셀을 스캔하지 않는다는 것을 의미합니다. –

답변

2

사용을 고려`후 다음을 수행 같은`경우 LEN R 내의 각 셀에 대해 사용

Sub test2() 
    Dim i As Integer 
    Dim j As Integer 

    Application.ScreenUpdating = False 
     For i = 1 To 524 
      For j = 12 To 1 Step -1 
       If Len(Cells(i, j)) <= 2 Then 
        Cells(i, j).Delete Shift:=xlToLeft 
       End If 
      Next j 
     Next i 
    Application.ScreenUpdating = True 
End Sub 
+0

예! 이것은 완벽하게 작동했습니다! "단계 -1"이 트릭을 완료해야합니다. 고맙습니다! 또한 screenupdating = false 일에 대해 내 마음을 읽었습니다. – AutomateMyJob

+0

@AutomateMyJob 의견을 보내 주셔서 감사합니다. –

-1

원하는 범위를 정의 : 그래서 그것은 모든 것을 찾을 수 없습니다, 단지 열 A에서 찾을 다음 코드는 여기에

지금까지 내 코드 열 B.에 이동하지 않고 종료됩니다 확인

Public Sub test2() 
    Dim cell As Range 

    For Each cell In Range("A1:X52") 
     If Len(cell) <= 2 Then 
      cell.Delete Shift:=xlToLeft 
     End If 
    Next 
End Sub 

그것은 작업

+0

죄송하지만 아무것도 변경되지 않았습니다. 그것은 여전히 ​​하나의 컬럼만을 수행 한 후 다음 컬럼으로 이동하지 않고 끝납니다. – AutomateMyJob

0

사용 범위를해야한다, 그래서 r=range("a1:l524)을 설정 한 다음 for each cell in r을 사용하여 범위의 각 셀에 대한 제어를 실행 한 후 수행 동일 if len(r.value)<=2 then cell.delete