[[20090909112614]] 『VLOOKUPで複数抽出』(なん)  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VLOOKUPで複数抽出』(なん)

      A       B          C        D          E        F       G     H 
 1  作業者  日付    工程     内容        品物      数      場所     備考
 2   佐藤  8/20   A    あ     か    100  東京    さ
 3   斎藤  8/25   B    い     き    200  大阪    し
 4   田中  9/18   A    え     こ    110  京都    す
 5   斎藤  9/19   B    う     く    140  千葉    し
 6   田中  9/20   B    い     か    160  埼玉    そ
 7   佐藤  9/25   A    あ     き    250  静岡    さ
 8   斎藤  9/26   B    い     き    190  青森    し

 このようなデータがあります。(H以降他のデーターもあります)

このデータを使い、個人別に別ファイルで集計したいのですができますか?

VLOOKUPだと先頭しか抽出できません

VLOOKUPで複数抽出できる方法ありますか?


 作業列を用いれば・・・

 H以降に設けてください。今回はI列に作成します。

 I2=IF(A2=$A$2,ROW(),"") 以下範囲(表示ではI8まで)までコピペ
 A10=INDEX(A$2:A$8,SMALL($I$2:$I$8,ROW()-9))
                                   ^^^^^^^
 A10以外に抽出させる場合は、ROW()-9 = 1 となるよう、9の数値をいじって下さい。

 (1or8)


      A       B          C        D          E        F       G     H 
 1  作業者  日付    工程     内容        品物      数      場所     備考
 2   佐藤    8/20      A        あ          か        100     東京      さ
 3   斎藤    8/25      B        い          き        200     大阪      し
 4   田中    9/18      A        え          こ        110     京都      す
 5   斎藤    9/19      B        う          く        140     千葉      し
 6   田中    9/20      B        い          か        160     埼玉      そ
 7   佐藤    9/25      A        あ          き        250     静岡      さ
 8   斎藤    9/26      B        い          き        190     青森      し
 9
10  作業者   日付     工程      内容        品物      数      場所      備考
11   佐藤    8/20      A        あ          か        100     東京      さ
12           9/25      A        あ          き        250     静岡      さ

 B11=IF(COUNTIF($A$2:$A$10,$A$12)>=ROW(A1),INDEX(B$2:B$10,SMALL(IF($A$2:$A$10=$A$12,ROW($A$1:$A$9)),ROW(A1))),"")

 と入力して、CtrlとShiftキーを押しながらEnterで確定し、配列数式にします。
 それを縦横にコピーするとこのようになります。

 なお、配列数式を多用すると重くなる(再計算に時間がかかる)のでご注意下さい。
 実際のデータ量が多い場合は適していません。
 (sato)


  コピーして、別シートへ 貼り付け。
  ですが・・・
 コピー&貼り付けが面倒だと思われるなら
 フィルタオプションの設定 ですかね。

 (HANA)

はい。表示だけされればよいです。(場所は指定しますけど)

すみません。言葉が変でした。データを抽出したいです。

HANAさんの言う通り、コピー&貼り付けが面倒なので・・・

フィルタオプションの設定の使い方が分かりません。


 誰のデータを抽出すればよいのか
 どこで指定するのかよく分かりませんが。。。
 フィルタオプションの使い方として


NANAさんありがとうございます。

VLOOKUPにこだわる訳ではありません。他の関数がよく分からないので・・・

フィルタオプションでは毎日作業する工程が多くて・・すみません

satoさんが教えてくれた下ので再度試してみました。

=IF(COUNTIF($A$2:$A$10,$A$12)>=ROW(A1),INDEX(B$2:B$10,SMALL(IF($A$2:$A$10=$A$12,ROW($A$1:$A$9)),ROW(A1))),"")

同じシート内ではうまくいきましたが別シートに作ると正しく表示しないです・・

式の意味を説明してくれませんか??よろしくお願いします。

また、他の関数でできる方法があれば教えてください。


 別のシートでも基本的には同じです。

 =IF(COUNTIF($A$2:$A$10,$A$12)>=ROW(A1),INDEX(B$2:B$10,SMALL(IF($A$2:$A$10=$A$12,ROW($A$1:$A$9)),ROW(A1))),"")

 $A$2:$A$10      検索データが入力されている範囲
 $A$12           検索したいデータを入力したセル
 B$2:B$10        検索で一致したときに表示するデータが入力されている範囲
                 これは右にコピーするとC$2:C$10 のように勝手に変わってくれる。
 ROW(A1)         先頭の行なら 1 、次の行は 2 という値を得る
                 別のシートで使うときでもSheet名はつける必要なし。
 ROW($A$1:$A$9)  常に1から9までの配列となる。
                 実際のデータの行数に合わせて適宜範囲を広げること。
                 別のシートで使うときでもSheet名はつける必要なし。

 IF($A$2:$A$10=$A$12,ROW($A$1:$A$9))
 A2:A10の範囲でA12と同じものがあれば、ROW(A1:A9)で、その範囲の何行目にあるかを調べる。

 今回の例題の場合は、B12セルでは
 {1;FALSE;FALSE;FALSE;FALSE;6;FALSE;FALSE;FALSE}
 という配列になる。

 SMALL(IF($A$2:$A$10=$A$12,ROW($A$1:$A$9)),ROW(A1))
 上記配列の中の一番小さい値を調べる。
 例の場合は 1 となります。

 なお、この数式をB13にコピーすると、ROW(A1)はROW(A2)となり、
 今度は2番目に小さい値を調べることとなる。
 例題の場合は 6 になります。

 INDEX(B$2:B$10,SMALL(IF($A$2:$A$10=$A$12,ROW($A$1:$A$9)),ROW(A1)))
 上記で得た値により、B2:B10の中から目的のデータを検索します。

 IF(COUNTIF($A$2:$A$10,$A$12)>=ROW(A1),
 この部分は検索に一致する値がいくつあるか調べて、
 不要な部分にエラー値を表示させないための処理です。

 以上、簡単な説明で分かりにくいかもしれませんが、
 自分で少しずつ理解できるように努力してみてください。

 ちなみに、数式バーの中で目的の範囲を選択して黒く反転させ、
 F9キーを押すことにより、数式の中の一部だけの結果が表示されるので
 数式の理解をする際に利用されると良いと思います。

 また、最後になりましたが配列数式を使わないで作業列を使う方法も有効です。
 ご紹介した数式の最初のステップを少し修正して、

 IF($A$2:$A$10=$A$12,ROW(A1))

 のようにして、基のデータの例えばI列に入力して下にコピーしておけば、
 同様にINDEX関数で目的のデータが検索できます。
 (sato)


 作業用列を使用(B列を挿入して)

      A       B          C        D          E        F       G     H     I 
 1  作業者      日付    工程     内容        品物      数      場所     備考
 2   佐藤  佐藤1  8/20   A    あ     か    100  東京    さ
 3   斎藤  斎藤1  8/25   B    い     き    200  大阪    し
 4   田中  田中1  9/18   A    え     こ    110  京都    す
 5   斎藤  斎藤2  9/19   B    う     く    140  千葉    し
 6   田中  田中1  9/20   B    い     か    160  埼玉    そ
 7   佐藤  佐藤2  9/25   A    あ     き    250  静岡    さ
 8   斎藤  斎藤3  9/26   B    い     き    190  青森    し

 B2=A2&COUNTIF(A$1:A2,A2)

 あとはVLOOKUP関数でできませんか


 ↑の投稿者様、このトピックは2009/09/09の投稿です。
また、投稿時にはニックネーム(ハンドルネーム、HN)も
書いていただくよう、お願いします。
 
COUNTIF関数は行数が多いと再計算に負荷を掛けることがあるので
固定的なデータならば、計算後、値貼り付けで固定してしまったほうが良いでしょう。
 
> あとはVLOOKUP関数でできませんか
引数[検索値]の指定にも工夫が必要です。
=VLOOKUP("佐藤"&ROW(A1),範囲,列,FALSE)
のように。
(みやほりん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.