2012-10-18 5 views
0

다음 코드가 있습니다. 처음 필터링을하면 잘 동작합니다. 그러나 두 번째로는 그렇지 않습니다. 필터링 된 열에는 연도가 포함됩니다.VBA 필터링 연도

For i = 1 To LastRow 
    If wSheet.Range("A1").Offset(i, 0) <> wSheet.Range("A1").Offset(i + 1, 0) Then 
     WellName = wSheet.Range("A1").Offset(i, 0) 
     Set rng = wSheet.Range("A1", Cells(LastRow, LastColumn)) 
     rng.AutoFilter Field:=1, Criteria1:=Name 
     L_top = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Row 
     L_bot = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Count 
     LastRowFilter = wSheet.Range("A1").End(xlDown).Row 
     LastColumnFilter = wSheet.UsedRange.Columns.Count 

     For j = 1 To LastRowFilter 
      If Year(wSheet.Range("B1").Offset(j, 0)) <> Year(wSheet.Range("B1").Offset(j + 1, 0)) Then 
       ReportYear = Year(wSheet.Range("B1").Offset(j, 0)) 
       Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter)) 
       rng2.AutoFilter Field:=2, Criteria2:=ReportYear 
       L_top = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Row 
       L_bot = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Count 

      End If 
     Next 

    End If 
Next 
+0

무엇이 오류입니까? – RocketDonkey

+0

은 실제로 오류가 아닙니다. 그러나 그것은 아무것도 숨기고있는 것처럼 보인다. 첫 번째 필터링은 성공적이지만 두 번째 작업을 수행하면 아무 것도 숨길 수 있습니다. thx –

+0

거기에 그것을 할 수있는 방법이 있습니까? 이미 매크로를 기록하려고하지만 여전히 작동하지 않습니다. –

답변

1

그것은 당신의 문제는 두 번째 필터가 나타납니다 (초기 필터의 원인 및 오류해야처럼 보인다,하지만 파산하지 않은 경우 : 그것을 해결하지 않음). 당신은 (의미가) 필터링 할 연도와 동일한 ReportYear을 설정하는

ReportYear = Year(wSheet.Range("B1").Offset(j, 0)) 
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter)) 
rng2.AutoFilter Field:=2, Criteria2:=ReportYear 

,하지만 당신은 그 해에 같은 값을 필터링하려는 :이 문제는 다음과 같은 라인이다. 이것은 논리적으로는 의미가있는 것처럼 보이지만 그 열에는 몇 년이 아니라 날짜가 들어 있다는 것을 기억하십시오. 코드에 대해 아무 것도 모르고 (다른 오류에 대해 사과 있도록),이 내 간단한 테스트에서 작동하는 것 같다 :이 양식에 필터를 당신의 ReportYear 값을 사용하지만집니다

ReportYear = Year(wSheet.Range("B1").Offset(j, 0)) 
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter)) 
rng2.AutoFilter Field:=2, Criteria1:= ">=" & DateSerial(ReportYear, 1, 1), _ 
       Operator:=xlAnd, Criteria2:="<=" & DateSerial(ReportYear, 12, 31) 

"나에게 사이의 모든 날짜보기 1 월 1 일과 12 월 31 일 ReportYear ". 나는 이것이 약간 비 숙련 된 것으로 보인다는 것에 동의한다. (나는 여기에있는 전문가 중 한 명이 훨씬 더 짧은 해결책을 가지고있을 것이라고 확신한다.) 그러나 그것은 당신의 상황에서 효과가있을 것이다.

+0

좋아요. 이 처음 시도하십시오 –

+0

@ mr.lumpy 소리가납니다. 문제가 해결되지 않으면 문제 해결에 도움이됩니다. – RocketDonkey