- ベストアンサー
エクセルのVLOOKUP関数について
- エクセルのVLOOKUP関数を使用しての集計に関する質問です。
- SHEET1に顧客ごとの振替履歴が並び、SHEET2で月ごとの集計を出したいです。
- パターン名の抽出につまづいており、解決策を教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> =IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)>$C$2,IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)<$D$2,(VLOOKUP(A3,sheet1!$A$2:$D$1000,4,FALSE)),"")) SHEET1には顧客ごとのデータがあると言うことで SHEET2A列のデータを検索してますから これだと,sheet1!$A$2:$D$1000の一番最初にヒットした行の3列目を見てるということになります データが以下のようにあるのだとしたら a社 200 2011/2/2 1 a社 300 2011/3/2 2 この場合、結果として 1 か 2月以外では FALSE が返ります。 SHEET2のA3&MONTH(C2) で SHEET1のA&MONTH(C) のデータを検索しなければいけないと思われますので たとえば SHEET1のC列の前に作業列を追加して(作業列がC列もとのC列がD列になる) =A2&MONTH(C2) として 必要なだけフィル それで =IF(AND(VLOOKUP(A3&MONTH($C$2),Sheet1!$C$2:$E$1000,2,FALSE)>$C$2,VLOOKUP(A3&MONTH($C$2),Sheet1!$C$2:$E$1000,2,FALSE)<$D$2),VLOOKUP(A3&MONTH($C$2),Sheet1!$C$2:$E$1000,3,FALSE),"") という式になると思われます。
その他の回答 (1)
- KURUMITO
- ベストアンサー率42% (1835/4283)
顧客名や検索する月などが何回も同じ列にある場合には単にVLOOKUP関数で処理することはできません。 問題を処理しやすいようにシート1では作業列を作って対応することにします。 シート1ではA1セルからD1セルまでの項目名が有り、2行目から下の行にそれぞれのデータが入力されているとします。 作業列としてE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",DATE(YEAR(C2),MONTH(C2),1)+IF(COUNTIF(A$2:A2,A2)=1,ROW(A2)*100000,MATCH(A2,A:A,0)*100000)) ここではそれぞれの顧客については振替日が突き当り1回でそれ以上には無いものとしています。 そこでシート2にお求めの表を作るのですがA2セルには求めようとする月がB2セルにはその月の初日を2011/3/1のように入力するとします。必ずその月の1日を入力します。C2セルにはその月の最終日を入力します。ここではB2セルのデータが大切でA2セルやC2セルは計算に使っていません。 3行目にはA3セルに顧客名、B3セルにはパターン名、C3セルには振替日、D3セルには金額とそれぞれ項目名を入力します。 A4セルから下方には表示したい顧客名を入力します。その上でB4セルには次の式を入力してD4セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(A4="",COLUMN(A1)>3),"",IF(COUNTIF(Sheet1!$A:$A,$A4)=0,"該当者なし",IF(COUNTIF(Sheet1!$E:$E,MATCH($A4,Sheet1!$A:$A,0)*100000+$B$2)=0,"データなし",INDEX(Sheet1!$A:$D,MATCH(MATCH($A4,Sheet1!$A:$A,0)*100000+$B$2,Sheet1!$E:$E,0),IF(COLUMN(A1)=1,4,IF(COLUMN(A1)=2,3,IF(COLUMN(A1)=3,2,""))))))) 最後にC列を選択してセルの書式設定から表示形式を日付から望みの日付にします。
お礼
KURUMITOさん ご回答ありがとうございました。 先にご回答いただいた方のやり方でやってみたところ先程無事完成しました! 今回は別のやり方になってしまいましたが、わかりやすく解説してくださっているので、これから試しにやってみようと思います。 本当にご親切にありがとうございました。
お礼
kmetuさん ご回答ありがとうございました! 教えていただいた通りにやってみたところ、無事集計表が完成しました。 本当に助かりました。