2017-03-12 2 views
1

다른 시트의 조건에 따라 Excel의 시트에서 두 개의 행을 제거합니다. 다음다른 시트 기준에 따라 행 삭제

조건부 시트가

Delete(Y/N) ReferenceID 
Y   1 
N   2 
Y   3 
Y   4 
N   5 

다음 데이터 시트가

삭제 (Y/N) 열에 I 존을 삭제해야 조건부 시트를 형성 근거
Name ReferenceID 
John 1 
Andy 2 
Mary 3 
Anna 4 
Rony 5 

, Mary와 Anna (참조 ID : 1,3 및 5)

또 다른 솔루션 예제 here을 살펴 보았지만 그 조건은 같은 시트에서 나온 것 같습니다. 나는 적용 할 수있는 참고 문헌에 근거하여 다른 시트에서 어떻게 작동시키는지를 모른다.

이 작업을 수행하는 방법에 대한 아이디어.

답변

2

xlFilterValues ​​매개 변수를 사용하여 사전 키에서 예를 누른 다음 자동 필터를 사용하여 참조 ID의 사전을 빌드합니다. 표시된 행이 있으면 삭제하십시오.

Option Explicit 

Sub qwewqw() 
    Dim d As Long, dict As Object 

    Set dict = CreateObject("Scripting.Dictionary") 
    dict.comparemode = vbTextCompare 

    With Worksheets("Conditional") 
     For d = 2 To .Cells(Rows.Count, "B").End(xlUp).Row 
      If LCase(.Cells(d, "A").Value2) = "y" Then 
       dict.Item(CStr(.Cells(d, "B").Value2)) = .Cells(d, "A").Value2 
      End If 
     Next d 
    End With 

    With Worksheets("Data") 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Cells(1, "A").CurrentRegion 
      .AutoFilter Field:=2, Criteria1:=dict.keys, Operator:=xlFilterValues 
      With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        .Cells.EntireRow.Delete 
       End If 
      End With 
      .AutoFilter 
     End With 
    End With 
End Sub 

이 방법으로 사전의 키를 사용하면 흥미롭게도 숫자를 필터링 텍스트로 처리해야합니다.

+0

감사합니다. 그것은 작동하고 믿을 수 없을 정도로 빠릅니다. 열의 정의 방법을 명확히 설명해주십시오. 조건부 시트에서 A = 삭제 (Y/N) 및 D = 참조 ID를 사용해야합니다. 데이터 시트에서 C = ReferenceID. 내가 코드를 조정하는 방법을 알아낼 수 없습니다. – Selrac

+0

죄송합니다. d = 2의 경우 .Cells (Rows.Count, "D"). End (xlUp) .Row // .AutoFilter Field : = 3, Criteria1 : = dict.keys, Operator : = xlFilterValues – Selrac

관련 문제