- 締切済み
Excelでのデータ抽出
Excelに複数シートがあり、各シートには以下の内容が記載されてます。 A列 伝票No. B列 日付 C列 担当者 D列 型番 ・ ・ ・ B列で任意の日付を検索し該当する値があれば、その行(A~D…列)を別シートにコピーし抽出したいのです。 VBAを使ってやりたいのですがどうしたらよいでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>VBAを使ってやりたいのですがどうしたらよいでしょうか エクセルVBA特有の フィルタオプションや Find などの方法もありますが またVBでもありえる 全行総なめチェック法 があります。 質問者のレベルが判らないが 全行総なめチェック法 でよいと思う。 最終行を割り出し 最初のデータ行のB列から、最終行のB列まで、全行に亘って、 任意の日付(内実は日付シリアル値という整数です)とB列が 等しいかどうか比較し、等しければ指定シート に書き出せばよい。 被検索シートが2シート以上あれば、For Each Nextで 繰り返せばよい。 実例はOKWAVEの過去の質問に沢山ありますよ。
- fmajin
- ベストアンサー率61% (75/122)
まず、VBAを検討する前に、通常の手順で別シートに抽出する方法を検討してみるとよろしいのではないでしょうか。 ご質問者さまのスキルがわかりませんが、[データ]→[フィルタ]→[フィルタオプションの設定]コマンドを実行すると、元のデータベースリスト範囲とは、別のセル位置にデータを抽出できるのはご存じでしょうか? ただし、通常の手順で別シートに抽出しようとしても、エラーが表示されてしまい、実行することができません。この場合、抽出先の別シートを表示しておいて、同コマンドを実行することで行えます。 (1)元のデータベースにはあらかじめ「Database」などの名前を付けておくといいでしょう。 (2)抽出先のシートに、元のデータベースのフィールド名だけをコピーしておきます。 (3)抽出先シートに日付の条件範囲を用意します。抽出範囲と重ならないようにして、たとえば1行目にフィールド名の「日付」として、2行目に日付の条件値を入力します。この2行の範囲が条件範囲となります。いつからいつまでというような日付の期間を条件にする場合は、2列分の条件範囲を用意する必要が出てきます。 (4)抽出先シートで、周囲に何も入力されていない空白のセルを選択した状態で、、[データ]→[フィルタ]→[フィルタオプションの設定]コマンドを実行します。 (5)表示されたダイアログで、まず[指定した範囲]オプションを選択します。すると、「リスト範囲」「検索条件範囲」「抽出範囲」の3カ所が指定できるようになります。「リスト範囲」には、元のリスト範囲を指定します。このとき名前を付けていれば、[F3]キーを押して表示されるダイアログから貼り付けられるので便利です。あとは、抽出先のシートで、「検索条件範囲」と「抽出範囲」(フィールド名をコピーしてきた1行分だけ)を指定して実行すれば、目的が達成できるはずです。 どうしてもVBA化する必要があるのならば、この手順を自動記録した上で研究されてみてはいかがでしょうか。