各シートの抽出条件を[リスト一覧]シートからデータを抽出したい。
※抽出条件は、[都道府県]と[品質]が一致したとき
※抽出したい項目は、[送料]等の項目
[リスト一覧]シート
3 都道府県 送料 品質
4 青森 元払い AA
5 岩手 着払い AAA
6 愛媛 相談 AA
7 愛知 元払い AAA
---集計後のイメージ---
[りんご]シート
3 都道府県 品質 入金 出金 損害金 送料
4 青森 AA 500 1000 300 元払い
5 岩手 AAA 1000 300 100 着払い
[みかん]シート
3 都道府県 品質 入金 出金 損害金 送料
4 愛媛 AA 300 900 100 相談
5 愛知 AAA 900 800 500 元払い
マクロでの回答は、ソースも記述願います。
どうか宜しくお願いします。
ワークシート関数だけで完結させる例
リスト一覧
A | B | C | |
---|---|---|---|
3 | 都道府県 | 送料 | 品質 |
4 | 青森 | 元払い | AA |
5 | 岩手 | 着払い | AAA |
6 | 愛媛 | 相談 | AA |
7 | 愛知 | 元払い | AAA |
りんご
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
3 | 都道府県 | 品質 | 入金 | 出金 | 損害金 | 送料 |
4 | 青森 | AA | 500 | 1000 | 300 | ここに後述の式を入れる |
5 | 岩手 | AAA | 1000 | 300 | 100 | これ以下はコピーすればOK |
F4に以下の式を入力します
=INDEX(リスト一覧!$B$4:$B$10,SUMPRODUCT((リスト一覧!$A$4:$A$10=$A4)*(リスト一覧!$C$4:$C$10=$B4)*ROW(リスト一覧!$A$4:$A$10))-3)
F5以下に式をコピーします
F4の式をコピーして、みかんシートにも同様に貼り付けすれば良いようにしてあります
($はコピペしても変化しないようにするための符号です)
式の解説
SUMPRODUCT((リスト一覧!$A$4:$A$10=$A4)*(リスト一覧!$C$4:$C$10=$B4)*ROW(リスト一覧!$A$4:$A$10)
リスト一覧シートの$A$4:$A$10の範囲で、りんごシートのA4(青森)と合致し、
かつ、リスト一覧シートの$C$4:$C$10の範囲で、りんごシートのB4(AA)と合致するものの行番号を返しなさい
太字で示した3箇所の10について、実際にデータが存在するのは7行目までですが、
今後増えることも考慮して100や1000など多めにしておきましょう
INDEX(リスト一覧!$B$4:$B$10,上の式-3)
リスト一覧!$B$4:$B$10の中で当該行のB列の値を返しなさい
ただし、リスト一覧シートは4行目から書かれているので上の式で得られた行番号から3を引いておくこと
以上、マクロを使わない例です
どうしても、
マクロにしなければならない理由があるということでしたら、
その理由によって作るべき方法も変わってきます
たとえば、
都道府県や品質を書き加えたり変更した時点で即座にマクロが起動して、
その行の送料などの欄を埋めたいですか?
それとも、必要な時にマクロを起動して埋めるのでもいいのですか?
(前者はExcelの動作が遅くなる場合がありますし、
後者は即座に見ることができないという欠点がそれぞれあります)
最後に一言、
マクロは環境によって動かなくなる場合も少なからずありますし、
手作業を代替するのがマクロ本来の役割なので、
計算関連はワークシート関数で完結しておくことをお勧めしておきます
ちょっと前提条件がずれているかもしれませんが・・・
[りんご]シートや、[みかん]シートに入力したとき、
[リスト一覧]シートから、データを拾ってくれば良いのですよね?
関数だけで回答します。
【作業1】
[リスト一覧]シートに作業列を作ります。
作業列は、[都道府県]-[品質]になるように文字を結合します。
A4セルなら =B4&"-"&D4 でA列にコピーします。
邪魔なら、非表示にしてください。
都道府県(検索や抜き出すデータ)より前(左側)に作るのがポイントです。
[リスト一覧]シート
3 作業列 都道府県 送料 品質
4 青森-AA 青森 元払い AA
5 岩手-AAA 岩手 着払い AAA
6 愛媛-AA 愛媛 相談 AA
7 愛知-AAA 愛知 元払い AAA
【作業2】
[りんご]シートと[みかん]シートのデータを拾ってきたい
セルに以下のVLOOKUP関数でデータを拾ってきます。
F4セル(送料)なら
=VLOOKUP(A4&"-"&B4,リスト一覧!$A$4:$D$7,3,FALSE)
[リスト一覧]シートにデータが無いと、#N/Aエラーになりますので、
気になるようなら、ERROR.TYPE関数などで弾いて、
=IF(ISERROR(VLOOKUP(A4&"-"&B4,リスト一覧!$A$4:$D$7,3,FALSE)),"",VLOOKUP(A4&"-"&B4,リスト一覧!$A$4:$D$7,3,FALSE))
などとすればよいかと。
作業列を作るのは、VLOOKUP関数が、複数の列のセルを検索することができないためです。
参考になれば。