アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

オートフィルターを使って複数の条件データを抽出する

オートフィルターを使って複数の条件データを抽出する


  オートフィルターを使うと複数の条件でデータを抽出できるようになります。検索よりも
  複雑な条件でデータの検索ができるので、使い方によっては便利に使えます。

  オートフィルターをかけた後の、データの行番号を取得することで、条件に合うデータを
  簡単に操作できるようになります。

  オートフィルターで絞り込まれた後、見えているているセルを取得するには、
  SpecialCells(xlCellTypeVisible) を使用します。

  Field で指定する番号は列番号です。

  オートフィルターでの検索は、文字による検索です。

  セルA20が日付データだとすると

      Criteria1:=Format(Range("A20"), "yyyy/mm/dd")
  
  こんなふうに文字に変換して設定にする必要があります。

  
  example34 をダウンロードして、動作を確認してください。


Sub Sample()

    Dim DB As Worksheet
    Dim FilterRow As Range
    
    Set DB = Worksheets("生産実績")

    'オートフィルタが設定されているかどうか判断する
    If DB.AutoFilterMode Then
    
        'オートフィルタの解除
        '一度AutoFilterを実行して、別の条件でデータを抽出する場合は、
        'いったんAutoFilterを解除してから、もう一度
        '条件を設定する必要があります
        DB.AutoFilterMode = False
        
    End If

    '条件1 の設定
    DB.Range("A1").AutoFilter Field:=2, Criteria1:="=未来が見えるメガネ"
    
    '条件2 の設定
    DB.Range("A1").AutoFilter Field:=9, Criteria1:=">2004/1/1", _
                   Operator:=xlAnd, Criteria2:="<2004/1/31"
    

    '条件に合うデータが何件あるか
    MsgBox DB.AutoFilter.Range.Columns(1). _
                         SpecialCells(xlCellTypeVisible).Count
    
    '条件に合うデータの行番号を表示する
    '行番号が分かれば条件に合うデータを操作できます
    For Each FilterRow In _
       DB.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)

          If FilterRow.Row <> 1 Then
              MsgBox FilterRow.Row
          End If

    Next FilterRow


End Sub


Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.