2013-04-10 8 views
-2

Excel 시트의 모든 빈 행을 제거하는 Excel 매크로가 있습니다. 이 매크로는 완료하는 데 너무 오래 걸립니다. 파일은 자동으로 생성되며 모든 파일은이 매크로를 실행해야합니다. 매크로는 값을 확인한 후에 한 번에 한 행을 삭제합니다.빈 행을 제거하십시오.

Sub RemoveRows() 
    Range("A8").Select 
    Dim checkval 
    Dim RowAmount 
    RowAmount = 93 

    Do 
     checkval = ActiveCell.Value 
     If (checkval = "") Then 
      ActiveCell.EntireRow.Delete 
     Else 
      ActiveCell.Offset(1, 0).Select 
     End If 
     RowAmount = RowAmount - 1 
    Loop While RowAmount > 0 
End Sub 

답변

0

은 빈 행에 걸쳐 온다면, 그 행을 삭제해야하고, 그래서 기본적으로 :

If rowValue = "" then 
    deleteThisRow And deleteAll Subsequent rows at once 
End If 

이 내가 지금 사용하고있는 코드는 다음과 같습니다

는이 같은 뭔가가 필요 그 아래의 모든 행.

아래의 모든 행을 삭제하려면 CTRL과 아래쪽 화살표를 누를 때 발생하는 것과 같은 일을 기본적으로 수행 할 수 있습니다. 다음 값으로 이동합니다 (만약 하나가 있다면, 귀하의 경우에는 거기 없을 것입니다) 또는 끝에 (행 65536 내가 만난 모든 Excel 버전의 한계입니다). 될 것이라고 ...

Range(Selection, Selection.End(xlDown)).Select 
Selection.Delete Shift:=xlUp 

이것은 선택한 행 (그래서 필요를 삭제하지 않으려면), 다음 값 또는 한쪽 끝을 아래로 이동하고 모든 행을 삭제합니다.

편집 - 전체 매크로 : 발견되는 최초의 "빈"아래의 모든 값이있는 경우를 염두에

Dim i As Integer 
For i = 1 To 93 
    Range("A" & i).Select 
    Dim CheckVal As String 
    CheckVal = ActiveCell.Value 
    If (CheckVal = "") Then 
     Range(Selection, Selection.End(xlDown)).Select 
     Selection.Delete Shift:=xlUp 
    End If 
Next i 

베어는하지만, 그들은 최초의 연속적인 값으로도 삭제됩니다.

+0

사용 방법입니다. 데이터베이스에서 sheet1에 데이터를 삽입 할 때 Sheet2는 sheet1의 필드에 대한 참조를 갖고 ref에 해당 필드를 설정합니다. 전지. 하지만 나는 100 개의 행이있는 그리드를 가지고있다. 데이터가 sheet2에 표시된 2 행만 있으면 98 행이 비어 있습니다. 이 매크로 som C#을 실행 한 다음 한 번에 한 행이 아니라 한 번에 98 행을 제거해야합니다. 이 경우 코드가 작동합니까? – Lahib

+0

내가 제안한 코드는 Excel 코드입니다. 그냥 ActiveCell.EntireRow.Delete 대신 매크로에 넣을 수 있어야하며 작동해야합니다. 왜 그것이 표시되어 있는지 보지 마라. – user1560834

+0

@ user1560834 왜 표시되지 않았는지 모르겠다. 그것은 잘 작동하지만 그것은 단지 하나의 열을 선택합니다. 선택해야하는 열 범위를 정의해야합니다. 내가 어떻게 할 수 있니? – Lahib

1

한 번의 작업으로 모든 necassary 행을 삭제하는 것이 좋습니다. 또한 Select을 피하고 셀 범위에서 반복을 피하면 속도가 빨라집니다. "빈"셀은 빈 문자열을 반환하는 수식을 포함 할 수 있습니다 :

다음은 제공하는 추가 정보를 기반으로

Sub Demo() 
    Dim sh As Worksheet 
    Dim rng As Range 
    Dim rngBlanks As Range 

    ' Get a reference to the sheet you want to process 
    Set sh = ActiveSheet 

    ' Get a reference to the range of cells to test 
    With sh 
     Set rng = .Range(.Cells(8, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
    End With 

    ' if there are no blanks SpecialCells will error, so handle it 
    On Error Resume Next 
    ' Reduce rng to reference only blank cells 
    Set rngBlanks = rng.SpecialCells(xlCellTypeBlanks) 
    On Error GoTo 0 

    ' see if there are any blanks 
    If Not rngBlanks Is Nothing Then 
     ' delete all of them 
     rngBlanks.EntireRow.Delete 
    End If 
End Sub 

업데이트에 대한 작업을해야 접근 방식이다.

는 여기에 지금 내가 어떤 행을 선택하고 있지 않다 엑셀에서 매크로를 실행하고 AutoFilter

Sub Demo() 
    Dim sh As Worksheet 
    Dim rng As Range 
    Dim rngBlanks As Range 

    Application.ScreenUpdating = False 
    ' Get a reference to the sheet you want to process 
    Set sh = ActiveSheet 

    ' Get a reference to the range of cells to test, plus header row 
    With sh 
     Set rng = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
    End With 

    ' Apply filr to hide non-empty cells 
    sh.AutoFilterMode = False 
    rng.AutoFilter Field:=1, Criteria1:="=", VisibleDropDown:=True 

    ' if there are no blanks SpecialCells will error, so handle it 
    On Error Resume Next 
    ' Reduce rng to reference only blank cells, exclude header row 
    Set rngBlanks = rng.Offset(1, 0).SpecialCells(xlCellTypeVisible) 
    On Error GoTo 0 

    ' see if there are any blanks 
    If Not rngBlanks Is Nothing Then 
     ' delete all of them 
     rngBlanks.EntireRow.Delete 
    End If 

    sh.AutoFilterMode = False 
    Application.ScreenUpdating = True 
End Sub 
+0

이것은 나를 위해 아무 것도하지 않습니다. 비어있는 셀에는 수식이 포함되어 있습니다. 물론 UR 코드에 영향을주는 경우 dunno – Lahib

+2

물론 수식이 들어있는 셀에 영향을줍니다. 수식이 포함 된 셀은 Null 문자열을 반환하면 비어 있지 않습니다. 당신은 그것을 OP에 포함시켜야합니다. BTW는이 작은 보석 또한 허용 된 대답에 영향을줍니다. –

+0

네, 맞습니다. 하지만 원래 예제에서는 수식이있는 빈 행을 제거합니다. 그러나 그것은 한 번에 한 행을하고 그것은 시간이 많이 소요됩니다. 한 번에 모든 빈 행을 제거해야합니다. – Lahib

관련 문제