Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : その他)
他のファイルからフィルタを使用しデータを抽出
投稿日時: 22/12/20 16:01:48
投稿者: monokeshi

 
呼び出し用ファイル(呼び出し.xlsm:シート名:抽出条件)に書かれてる条件を元に、
他のエクセルファイルのリストを参照し、抽出結果を作成しいのですが
VBA初心者のため、なかなか結果にたどりつきません。
フィルタを使用し抽出しいのですが、やり方がわからないため、ご質問させていただききました。
どなたかご教授できますでしょうか。
 
呼び出し.xlsmには、名前と住所と参照するファイル名が記載されています。
参照するファイル名にかかれれているファイルの中に、名前、住所に該当する
データの名前、電話番号を抽出したいです。
 
どうかよろしくお願いいたします。
 
【呼び出し.xlsm】
■シート名:抽出条件
名前,住所,参照ファイル名
山田,東京,a.xlsx
山田,千葉,a.xlsx
佐藤,神奈川,b.xlsx
 
【a.xlsx】
■シート名:一覧
番号,名前,住所,電話番号
1,佐藤,神奈川,042-999-9999
2,山田,千葉,03-1111-2222★
3,井上,埼玉,048-111-2222
4,高橋,東京,045-111-3333
5,山田,東京,090-9999-8888★
6,山田,東京,03-1234-5678★
 
【b.xlsx】
■シート名:一覧
番号,担当,住所,連絡先
1,スズキ,東京,03-8888-8888
2,佐藤,神奈川、045-444-555★
3,佐藤,東京、03-7777-8888
 
実際のファイルには★はついておりません。
わかりやすくするため、付けております
 
 
【呼び出し.xlsm】
■シート名:抽出結果
山田,03-1111-2222
山田,090-9999-8888
山田,03-1234-5678
佐藤,045-444-555

回答
投稿日時: 22/12/20 16:39:15
投稿者: sk

引用:
【a.xlsx】
■シート名:一覧
番号,名前,住所,電話番号
1,佐藤,神奈川,042-999-9999

引用:
【b.xlsx】
■シート名:一覧
番号,担当,住所,連絡先
1,スズキ,東京,03-8888-8888

(呼び出し.xlsm を除く)参照元のブックが全て同じフォルダに
保存されているのであれば、ワークシート[一覧]の列見出し行の
各列の名前を統一した上、 PowerQuery によって何から何まで
やった方がよさそうな印象を受けますが。

投稿日時: 22/12/20 17:13:36
投稿者: monokeshi

ご回答ありがとうございます。
 
説明不足、また知識不足で申し訳ありません。
 
ファイルの場所ですが、同一フォルダになく、他のフィルダにございます。
また、ファイルによって、名前、担当者のようにヘッダーが異なっており、
それぞれ管理者が異なるため、変更できません。
また、【a.xlsx】は、2列目の名前と、3列目の「住所」を参照し
【b.xlsx】は、2列目の「担当」と、3列目の「住所」参照し
データを抽出したいと考えております。
 
以上となりますが、引き続きよろしくお願いいたします。

回答
投稿日時: 22/12/21 10:46:46
投稿者: Suzu

オートフィルター にて抽出後、データコピーは以下が参考になるかと思います。
 
絞り込んだ結果をコピーする 【Office TANALA】
http://officetanaka.net/excel/vba/tips/tips155c.htm
 
 
とりあえずは、マクロの自動記録を使い、VBAのコードの参考にしてみましょう。
その上で、自力でどこまで出来ていて、具体的に何が判らないのかを示してみましょう。

回答
投稿日時: 22/12/21 11:01:31
投稿者: sk

引用:
ファイルの場所ですが、同一フォルダになく、他のフィルダにございます。

その場合、呼び出し.xlsm のワークシート[抽出条件]の
[参照ファイル名]列の各セルには各ファイルの名前ではなく
フルパス(絶対パス)が格納されていなければなりません。
 
それらのファイルの所在をどのようにして管理、把握されているのかは不明ですが、
もし全てのファイルの所在が判っているのであれば、一旦それらのコピーを
1 つのフォルダにまとめてしまった方が何かと処理しやすいのではないかと思いますが。
 
引用:
また、ファイルによって、名前、担当者のようにヘッダーが異なっており、
それぞれ管理者が異なるため、変更できません。

ワークシートのデザインを個々のユーザーに任せているのであれば、
「全てのブックにおいて参照元のワークシートの名前は
常に[一覧]で統一されている」という保証もないのではないでしょうか。
 
引用:
また、【a.xlsx】は、2列目の名前と、3列目の「住所」を参照し
【b.xlsx】は、2列目の「担当」と、3列目の「住所」参照し
データを抽出したいと考えております。

「列の名前は統一されていないけど、列の位置と順番は統一されている」
ということが常に保証されているのでしょうか。
 
まずその辺りのルールをある程度厳格化しない限り、どのようなコードを
記述しても期待されているような結果を得るのは難しいと思います。

トピックに返信