本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[XL][オートフィルタ] で抽出された行の情報を取得する方法

文書番号: 401692

最終更新日: 2003/03/25


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP401692

概要

[データ] - [フィルタ] - [オートフィルタ] コマンドは、リスト内の特定の値が入力された行、または指定された検索条件に一致する行だけを抽出して表示する機能です。
本文書では、Microsoft(R) Visual Basic(R) Programming System Applications Edition (以下 VBA) を使って、条件に一致した行の情報を取得する方法をサンプル モジュールと共に解説しています。

詳細

検索条件を指定して得られた、条件に一致する行の情報を取得するには Range オ ブジェクトの SpecialCells メソッドや For Each ステートメントなどを組み合わせて使用します。

リスト、検索条件

下の表で、セル範囲 A1:B10 はリストです。リストに対して [データ] - [フィルタ] - [オートフィルタ] コマンドを実行します。
  《検索条件》
      サンプル モジュールで指定している条件は次の通りです。
  • 列見出し「食料品目」に含まれるアイテム「乳製品」
      《リスト》
         __|____A_____|____B_____|
          1|食料品目  |販売員    |
          2|肉類      |中村      |
          3|乳製品    |中村      |
          4|肉類      |高田      |
          5|農産物    |高田      |
          6|乳製品    |中村      |
          7|乳製品    |小川      |
          8|飲料      |中村      |
          9|肉類      |小川      |
         10|農産物    |中村      |
    

サンプル 1

次のサンプル モジュールでは、《リスト》 に対して [オートフィルタ] を実行し、 指定した《検索条件》に一致するすべての行の「行番号」を MsgBox 関数を使用して表 示しています。
  Sub ShowVisibleRows()
      Dim FilterRow As Range
      Worksheets("Sheet1").Range("A1").AutoFilter
      Worksheets("Sheet1").Range("A1").AutoFilter Field:=1, _
          Criteria1:="乳製品"
      For Each FilterRow In Worksheets("Sheet1").Range("A1"). _
          CurrentRegion.Resize(, 1).SpecialCells(xlVisible)
          If FilterRow.Row <> 1 Then
              MsgBox FilterRow.Row
          End If
      Next FilterRow
  End Sub

サンプル 2

次のサンプル モジュールでは、《リスト》 に対して [オートフィルタ] を実行し、 指定した《検索条件》に一致した行の「数 (総数) 」を MsgBox 関数を使用して表示し ています。
  Sub GetVisibleRowsCount()
    Dim FilterRow As Range
    Dim RowCount As Integer
    Worksheets("Sheet1").Range("A1").AutoFilter
    Worksheets("Sheet1").Range("A1").AutoFilter Field:=1, _
        Criteria1:="乳製品"
    RowCount = 0
    For Each FilterRow In Worksheets("Sheet1").Range("A1"). _
        CurrentRegion.Resize(, 1).SpecialCells(xlVisible)
        If FilterRow.Row <> 1 Then
            RowCount = RowCount + 1
        End If
    Next FilterRow
    MsgBox RowCount
  End Sub

サンプル 3

次のサンプル モジュールでは、《リスト》に対して [オートフィルタ] を実行し、指定した《検索条件》に一致した行の「データ」を同一ブック内のワークシート "Sheet2" にコピーしています。
  Sub AutoFilterAndCopy()
      Worksheets("Sheet1").Range("A1").AutoFilter
      Worksheets("Sheet1").Range("A1").AutoFilter Field:=1, _
          Criteria1:="乳製品"
      Worksheets("Sheet1").Activate
      Range("A1").CurrentRegion.SpecialCells(xlVisible).Select
      Selection.Copy
      Worksheets("Sheet2").Activate
      Range("A1").Select
      Worksheets("Sheet2").Paste
  End Sub

Keywords: KBHOWTO KB401692
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch

inserted by FC2 system