0

以下に示すコードがあります。初めてフィルタリングすると、正常に機能します。ただし、2回目はそうではありません。フィルター処理された列には年が含まれています。

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
4

1 に答える 1

1

あなたの問題はあなたの2番目のフィルターのようです(最初のフィルターが原因でエラーが発生するようですが、壊れていない場合は修正しないでください:))。問題は次の行にあります。

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)

これはあなたのReportYear値を使用しますが、フィルターを「1 月 1 日から 12 月 31 日までのすべての日付を表示する」という形式に変更しますReportYear。これは少し洗練されていないように思えることに同意します (ここの教祖の 1 人がはるかに短い解決策を持っていると確信しています) が、あなたの状況ではうまくいくかもしれません。

于 2012-10-18T03:45:40.107 に答える