2017-04-12 1 views
1

Q 열에 특정 단어가 포함되지 않은 행을 삭제하고 합계를 다시 계산하려고합니다. 이제는 이것이 설계중인 코드의 일부이므로 나머지 코드는 정상적으로 작동하므로이 부분 만 게시하고 있습니다.vba - 특정 단어가 포함되지 않은 행을 삭제합니다.

내 데이터는 인용 및 해당 정보 목록이 있으며 해당 지역 (열 Q)에 대한 열을 추가하여 분석 할 영역을 필터링하고 싶습니다. 전체 행에 대해서는 지역에있는 합계 만 반영해야하므로 숫자를 다시 계산해야합니다.

내 데이터 범위가 머리글과 합계 행을 병합 했으므로 상황이 복잡해 지는지 확실하지 않습니다.

Sub test() 

Dim Rng As Range 
Dim x, lngLastRow As Long 
Dim ws As Worksheet 

Set ws = Worksheets("A") 
lngLastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row 
Set Rng = Range("Q5:Q" & lngLastRow - 1) 
For x = Rng.Rows.Count To 1 Step -1 
If InStr(1, Rng.Cells(x, 17).Value, "NW") = 0 Then 
Rng.Cells(x, 1).EntireRow.Delete 
End If 
Next x 
End Sub 

이제 현재 코드는 병합 된 헤더를 제외한 모든 데이터를 삭제하므로 각 영역을 필터링하는 데 도움이 필요합니다. 그리고 지금까지 코드가 작동하지 않아 합계 행을 다시 계산하지 않았 음을 알 수 있습니다. 그래서 아직 그 부분을 추가하지 않았습니다.

필자가 시도한 두 번째 방법은 필터 함수를 사용하는 것이며 "Run Time Error 1004 AutoFilter 메서드가 Range 클래스에 실패했습니다."이며 이것이 내가 시도한 코드입니다.

With ws.Range("B5", "Q" & lngLastRow) 
    .AutoFilter 
    .AutoFilter Field:=17, Criteria1:="NW" 
    End with 

그래서 어느 방법이 더 효과적인지 또는 다른 접근 방법이 있는지 알 수 없습니다.

여기 내 데이터가 표시됩니다.

enter image description here

답변

2

당신은과 같이 1 대신에 17 아래 코드 행의 열 값을 변경해야합니다 당신은 당신이 설정 한 범위 내에서 세포를 액세스하기 때문에

If InStr(1, Rng.Cells(x, 1).Value, "NW") = 0 Then 

이것은 이전에는 하나의 열만 있습니다 : column Q. 따라서 Q 열은 Rng 변수의 첫 번째 열입니다. 열 17은 범위 (열 Q)의 첫 번째 열, 즉 열 AG에서 17 열입니다. ws.Cells(x, 17).Value으로 작성한 코드는 올바른 열을 선택하게됩니다. 그 이유는 설정 한 범위의 17 번째 열과 반대로 스프레드 시트의 17 번째 열이되기 때문입니다. 당신이 뭔가를 시도 할 수

+0

덕분에이 내가 찾고 있어요 것입니다. – sc1324

0

...

Sub FilterAndDeleteRows() 
Dim ws As Worksheet 
Dim lr As Long 
Set ws = ActiveSheet 
lr = ws.Cells(Rows.Count, 2).End(xlUp).Row 
ws.AutoFilterMode = False 
ws.Range("B2:Q4").AutoFilter field:=16, Criteria1:="NW" 
On Error Resume Next 
If ws.Range("Q4:Q" & lr).SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then 
    ws.Range("Q5:Q" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
End If 
ws.AutoFilterMode = False 
End Sub 
관련 문제