よねさんのWordとExcelの小部屋

詳細設定(フィルター オプションの設定)でデータを書き出す:Excel基本講座

スポンサードリンク


更新:2024/7/31;作成:2005/12/7

完全一致でデータを抽出する 複数条件で抽出する [AND条件]
複数条件で抽出する [OR条件] 期間でデータを書き出す
条件設定に数式を使う方法
別シートへデータを書き出す 特定項目だけのデータを書き出す
VBAを使ってデータを書き出す

このページで使用するデータ表 (以下、『データ表』とします)

フィルタオプションの設定(詳細な条件設定での抽出)    Topへ

完全一致でデータを抽出する

前方一致となる例

完全一致での検索を行うための条件の書き方

  1. データ範囲の外側に抽出条件を入力します。
    M2セルに列見出し「担当者」を入力します。
    M3セルには「="=井上"」と入力すると完全一致での検索条件になります。セルには =井上 と表示されます。
    または、「'=井上」 と頭に「’(シングルクォーテーション)」を付けて入力します。
  2. [データ]タブの並べ替えとフィルター グループにある[詳細設定]を選択します。
  3. リスト範囲にデータ表のセル範囲 B2:H19 
    検索条件範囲に M2:M3 を設定します。
    指定した範囲にチェックを入れて、抽出範囲に M5 とします。
    [OK]ボタンをクリックします。
  4. 「担当者」が「井上」のデータが抽出されました。
    伝票No. 1001の 井上A が抽出されていません。

複数条件で抽出する [AND条件]

複数条件で抽出する [OR条件の書き方]

期間でデータを書き出したいとき

期間の条件の書き方

条件設定に数式を使う方法

フィルタオプションで別シートへの抽出/重複データの削除   Topへ

フィルタオプションで特定の項目(列)を抽出する    Topへ

フィルタオプションの設定をVBAで処理する  Topへ

VBAの作成例

VBA(マクロ)作成手順

  1. 抽出先のSheet2を選択し、抽出条件をB2に「項目名」、B3に「食費」と入力します。
    Sheet2のセルを選択した状態(Sheet2がアクティブな状態)で実行します。
  2. [開発]タブのコード グループにある[マクロの記録]を選択します。
  3. マクロの記録ダイアログが表示されます。
    [OK]ボタンをクリックします。
  4. [データ]タブの並べ替えとフィルター グループにある[詳細設定]を選択します。
  5. フィルターオプションの設定でリスト範囲に Sheet1!B2:H13 
    検索条件に Sheet2!B2:B3 を指定します。
    抽出先「指定した範囲」にチェックを入れ、抽出範囲にSheet2!B5 と設定します。
    [OK]ボタンをクリックすると、Sheet2にデータが抽出されます。
  6. 自動記録を終了するため、[開発]タブの[記録終了]ボタンをクリックします。
  7. ちなみに、抽出データは下図のようになります。
  8. [開発]タブの[Visual Basic ]を選択し、VBEのウィンドウを開きます。
    ショートカットキーは[Alt]+[F11]です。
  9. 「標準モジュール」の「Module1」をクリックすると、右側に記録作成されたコードが表示されます。

    以下のようなコードが記録されます。(不要な部分は削除しています)
    Sub Macro1()
    '
    ' Macro1 Macro

    '
      Sheets("Sheet1").Range("B2:H13").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("B5"), Unique:=False
    End Sub
  10. このままのコードでは、抽出先Sheet2のB5以下の行を抽出のたびにクリアしないとうまく動きません。
    また、データが増減した場合にも対応できないかもしれませんので、コードをちょっと変更します。
    Sub Macro1()
      Dim myRow1 As Long, myRow2 As Long
        '----Sheet1とSheet2のB列で最終行を捜します。
        myRow1 = Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row
        myRow2 = Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row
          '----Sheet2のB5以下が入力されていたらクリアします。
          If myRow2 >= 5 Then
            Sheets("Sheet2").Range("B5:H" & myRow2).ClearContents
          End If
          '----フィルタオプションの設定で抽出します。
          '----元データはSheet1、抽出条件はSheet2のB2:B3、抽出先はSheet2のB5です。
          Sheets("Sheet1").Range("B2:H" & myRow1).AdvancedFilter _
              Action:=xlFilterCopy, _
              CriteriaRange:=Sheets("Sheet2").Range("B2:B3"), _
              CopyToRange:=Sheets("Sheet2").Range("B5"), _
              Unique:=False
    End Sub
  11. Sheet2を選択します。
    [開発]タブのコントロール グループの[挿入]からフォームコントロールの[ボタン]をクリックし、Sheet2にボタンを作成します。
  12. 「マクロの登録」ダイアログが開くので、先ほど作成したマクロ「Macro1」を選択し、[OK]ボタンをクリックします。
  13. Sheet2の[ボタン1]にマクロが登録され、ボタンをクリックするとマクロが実行されます。
  14. ボタンを右クリックすると、ボタン名を変更できますので、「データ抽出」としてみました。
    B3セルに「教育・教養費」と入力し、「データ抽出」ボタンをクリックするとデータが抽出されました。

データ抽出の条件設定がバージョンによって異なる

スポンサードリンク



HomeExcel(エクセル)講座の総目次Excel(エクセル)基本講座の目次|フィルタオプションの設定・詳細設定(データ抽出)

PageViewCounter
Counter
Since2006/2/27