2012-08-01 1 views
3

Excel VBA에서 전체 행을 삭제하는 방법에 대한 일부 스 니펫을 사용하려고했지만 "IsNumber"확인을 포함하도록 수정할 수 없습니다.Excel VBA - 셀이 정수인 경우 전체 행을 삭제하십시오.

내가 좋아하는, 활성 영역을 선택 할 수 있어야합니다 :

Set r = ActiveSheet.Range("A1:C10") 

그리고 그것은 행 다음 행 통과 (그 지역의 모든 세포를 확인)으로가있는 경우, 전체 행을 삭제 셀에있는 숫자. 예를 들어

:

NA NA NA 21 
NA 22 NA 44 
00 NA NA NA 
NA NA NA NA 
55 NA NA NA 

다음 (

NA NA NA NA 
+0

범위. ("B1 : C5") SpecialCells (xlCellTypeConstants, xlNumbers)는 모든 사람을 제안 – tracer

+0

감사를 .EntireRow.Delete와 도움이됩니다. 이 바로 위에있는 주석은 내가 원하는 것입니다. 누군가가 도움이되기를 바랍니다. – tracer

+1

그것은 그것을 사용하는 잘못된 방법이며 어떤 시점에서 오류가 발생할 수 있습니다. 나는 2 가지 시도하고 테스트 한 방법을 당신에게 줬어. 둘 다 도움이되지 않았다는 뜻인가요? –

답변

5

당신의 선택 :

WAY 1을 가지고있는 4 일을 제외한 모든 행을 삭제 할 매크로 Trial and TESTED)

여기에는숫자가있는 행을 식별하려면을 입력하십시오.

이것을 (TRIED 및 시험)

이 숫자

Sub Sample() 
    Dim ws As Worksheet 
    Dim delrange As Range 
    Dim lRow As Long, i As Long 

    On Error GoTo Whoa 

    Set ws = Sheets("Sheet1") 

    With ws 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     For i = 1 To lRow 
      If Application.WorksheetFunction.Count(.Rows(i)) > 0 Then 
       If delrange Is Nothing Then 
        Set delrange = .Rows(i) 
       Else 
        Set delrange = Union(delrange, .Rows(i)) 
       End If 
      End If 
     Next i 

     If Not delrange Is Nothing Then delrange.Delete 
    End With 

    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 

웨이 (3)를 확인하기 위해 루핑 및 Count() 사용은 (TRIED 및 시험)

Sub Sample() 
    Dim ws As Worksheet 
    Dim rng As Range 

    On Error GoTo Whoa 

    Set ws = Sheets("Sheet1") 

    With ws 
     Set rng = .Cells.SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow 

     rng.ClearContents '<~~ or rng.Clear if cells have formatting 

     .Cells.Sort Key1:=.Range("A1") 
    End With 

    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 

WAY 2 자동 필터를 사용합니다. 행 1에 헤더가 있고 범위에 빈 셀이 없다고 가정합니다.

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long, lCol As Long, i As Long 
    Dim ColN As String 

    On Error GoTo Whoa 

    Set ws = Sheets("Sheet1") 

    With ws 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 

     For i = 1 To lCol 
      '~~> Remove any filters 
      .AutoFilterMode = False 
      ColN = Split(.Cells(, i).Address, "$")(1) 

      '~~> Filter, offset(to exclude headers) and delete visible rows 
      With .Range(ColN & "1:" & ColN & lRow) 

       .AutoFilter Field:=1, Criteria1:=">=" & _ 
       Application.WorksheetFunction.Min(ws.Columns(i)), _ 
       Operator:=xlOr, Criteria2:="<=" & _ 
       Application.WorksheetFunction.Max(ws.Columns(i)) 

       .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
      End With 

      '~~> Remove any filters 
      .AutoFilterMode = False 
     Next 
    End With 

    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 
+0

고마워요! 그것은 오른쪽 셀의 내용을 삭제했지만 셀이 숫자 인 경우 전체 행을 삭제하려고합니다. "rng.Delete"로 시도했지만 그럴 것 같지 않습니다 .. – tracer

+0

행의 내용을 삭제 한 다음 맨 아래의 빈 행을 푸시합니다. 행에 형식이 지정되어 있으면'rng.ClearContents' 대신'rng.Clear'를 사용할 수도 있습니다. –

+0

도움을 주셔서 감사합니다! 그 specialCells 파트로 아주 작은 버전을 만들었습니다. 원래 게시글에 덧글을 추가했습니다. – tracer

0
Dim currentPos As Integer 

currentPos = 1 

Do While (currentPos < yourNumberofRow) 
If (Range("A" & currentPos).Value.IsNumeric = True) Then 
    Rows(currentPos & ":" & currentPos).Select 
    Selection.Delete 
End If 

currentPos = currentPos +1 
Loop 

시도하지하지만 쉽게 코드를 삭제하고 ISNUMERIC 시험을 이해하기.

+0

'Range ("A"& currentPos) .Value.IsNumeric'? –

+0

실수를하십시오. IsNumeric은 다음과 같이 사용됩니다 : If (IsNumeric (Range ("A3"))) Then MsgBox ("숫자 값입니다") End If' – Dekx

1
Sub DeleteNumeric() 

    Dim i As Long 
    Dim rCell As Range 
    Dim rRow As Range 
    Dim rRng As Range 

    'identify the range to search 
    Set rRng = Sheet1.Range("A1:D5") 

    'loop backwards when deleting rows 
    For i = rRng.Rows.Count To 1 Step -1 
     'loop through all the cells in the row 
     For Each rCell In rRng.Rows(i).Cells 
      If IsNumeric(rCell.Value) Then 
       'delete the row and go to the next one 
       rCell.EntireRow.Delete 
       Exit For 
      End If 
     Next rCell 
    Next i 

End Sub