◆フィルタ オプションを使用して、条件と一致したデータを別のシートにコピーする
データを処理するアプリケーションを作成する場合に、目的のデータだけを抽出して、
別のシートにコピーすることは良くあると思います。
フィルターオプションを使うと簡単にできます。
検索条件と一致したデータを別のシートにコピーするには、
[データ]−[フィルタ]−[フィルタ オプションの設定]を使います。
ここでは、Download の example1 を例にして説明します。
example1 の 例題 (csv) をダウンロードしてください。
ダウンロードした表から
品目コードがスーパー洗濯機で、
生産着手予定日が 2004/10/1 以降のデータを、
実際に Excel を操作して、別のシートにコピーして見ましょう。
シートを追加します。シートの名前を「Item」とします。
セルA1 から B2 まで、図のように入力してください。
セルA2 は 「=">2004/10/1"」 と入力します。
メニューの[データ]−[フィルタ]−[フィルタ オプションの設定]を実行します。
@抽出先は、指定した範囲内を選択します。
Aリスト範囲は、in課題1!$A$1:$N$428 と入力します。
をクリックして、in課題1のシートを選択後、
データ領域を選択してください。
もう一度押すともとに戻ります。
B検索条件範囲は、Item!$A$1:$B$2 と入力します。
ItemシートのA1〜B2 をドラッグすれば自動的に入力されます。
C抽出範囲はItem!$A$10 を入力します。
Itemシートの A10 をクリックすれば自動的に入力されます。
[OK]をクリックしてください。
10行目以降に条件に一致したデータをコピーできました。
最終的には条件を記述してある 1〜9行目は不要なので、
Rows("1:9").Delete
で削除しておきます。
上記操作をマクロで記録させると下記コードになります。
Sub test1()
Range("A1") = "品目コード"
Range("A2") = "スーパー洗濯機"
Range("B1") = "生産着手予定日"
Range("B2") = ">" & "2004/10/1"
Workbooks("in課題1.CSV").Sheets("in課題1").Range("A1:N428"). _
AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:B2"), _
CopyToRange:=Range("A10"), Unique:=False
Rows("1:9").Delete
End Sub
このマクロを実行するときは、"Item" シートを選択した状態
(最前面にシートを持ってくる)にして実行してください。
Excel のマクロを作成する場合、現在どの Book が Active になっていて、
どの Sheet が 選択されているかをいつも認識していることは重要です。
example1 をダウンロードして、サンプルマクロを参照してください。
コメントを詳しく入れてあります。