2012-05-16 3 views
1

전체 열에서 N/A 셀을 찾은 다음 N/A이 발견되면 전체 행을 삭제할 수있는 방법을 찾고 있습니다. 이 VBA 코드를 찾았지만 하나의 열만 선택했기 때문에 나에게 적합하지 않습니다. 도와주세요 (I 엑셀 맥 2011 년에 300,000 행 주위에 있어요)VBA는 N/A가 발견되면 행을 삭제하는 Excel 코드입니다

Sub DeleteBlankARows() 
    With Application 
     .Calculation = xlCalculationManual 
     .ScreenUpdating = False 
     Dim r As Long 
     For r = Cells(Rows.Count, 11).End(xlUp).Row To 1 Step -1 
      If Cells(r, 11) = "" Then Rows(r).Delete 
     Next r 
     .Calculation = xlCalculationAutomatic 
     .ScreenUpdating = True 
    End With 
End Sub 

답변

1

보십시오이 (윈도우 XP/Excel 2007을 테스트하지만 맥/오피스 2011 작동합니다) :

Option Explicit 

Sub DeleteNARows() 
    Dim r As Long 
    Dim iCol As Long 
    With Application 
     .Calculation = xlCalculationManual 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
     For iCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column 
      For r = Cells(Rows.Count, iCol).End(xlUp).Row To 1 Step -1 
       If Application.WorksheetFunction.IsNA(Cells(r, iCol)) Then Rows(r).Delete 
      Next r 
     Next iCol 
     .Calculation = xlCalculationAutomatic 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
    End With 
End Sub 

당신이

+0

고맙습니다! 하지만 어떻게 자동으로 실행하고 모든 열을 확인 할 수 있습니까 ?? 내가 UH 란까지 가지고있어! – soso101

+0

모든 코드를 처리하기 위해 코드를 편집했습니다 – JMax

+0

+1 멋지게 처리했습니다 – brettdj

2

또 다른 방법은 신속하게 NA() (나는 당신의 아르를 가정 한 있었는지 세포 테스트 Find을 사용하는 것입니다 코드의 시작에서 #N/A FOT 확인하려는 당신이 열을 변경 (아마 할) 수 있습니다 0에 대한 테스트수식 셀로 - 업데이트 할 수 있거나 텍스트 일 ​​수 있습니다.

이 코드는 SpecialCells을 사용하여 오류 값만 검색합니다.

Sub GetNA() 
Dim rng1 As Range 
Dim rng2 As Range 
Dim rng3 As Range 
Dim strFA As String 

On Error Resume Next 
Set rng1 = ActiveSheet.UsedRange.SpecialCells(xlFormulas, xlErrors) 
On Error GoTo 0 

If rng1 Is Nothing Then 
    MsgBox "No NA() cells" 
    Exit Sub 
End If 

With rng1 
    Set rng2 = .Find("=NA()", LookIn:=xlFormulas) 
    If Not rng2 Is Nothing Then 
     strFA = rng2.Address 
     Set rng3 = rng2.EntireRow 
     Do 
      Set rng2 = .FindNext(rng2) 
      Set rng3 = Union(rng3, rng2.EntireRow) 
     Loop While Not rng2 Is Nothing And rng2.Address <> strFA 
    End If 
    If Not rng3 Is Nothing Then rng3.Delete 
End With 

End Sub 
+0

역시 좋은 질문입니다. # N/A가 너무 많지는 않지만 검사 할 셀 범위가 크면 빠를 수 있습니다. 그러나, 나는 [찾기]가 아주 느리다는 것을 읽었다. (http://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance- 총격 사건 /) – JMax

+0

+1 평소처럼 좋은 사람 : –

+2

@JMax는 Charles에게서 좋은 링크입니다. 그러나 기사에서 알 수 있듯이 Find는 다중 열 검색 (그리고 부분 일치, 대소 문자 구분, 형식 일치 등을 처리 할 수 ​​있으므로 다른 방법보다 다재다능한 방법)을 수행하는 방법입니다. 단일 열 검색의 경우 자동 필터가 기사의 주목할만한 예외입니다 – brettdj

관련 문제