• ベストアンサー

<EXCEL>VLOOKUPの活用方法について

以前に類似の質問があったようですが、解決法が得られていなかったので質問させて頂きます。 EXCELでデータベース SHEET#1 来店日と来店者氏名 SHEET#2 来店日を入力すると、来店者氏名の一覧が表示されるシート」 を作りたいと考えておりますが、関数の利用でSHEET#2は実現できるでしょうか? 例) SHEET#1      → SHEET#2 1日 A様         1日 来場者 1日 B様              A様 1日 C様              B様 2日 D様              C様 3日 E様 といったイメージです。 SHEET#1を検索範囲としてSHEET#2においてVLOOKUP関数を利用 すると、「1日」でヒットする一番最初のデータ(=A様)しか 検索してくれず、困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

もし、別シートの関数で必要であれば、作業列の案です。 SHEET#1    A B  C     1日 A様           1日 B様                1日 C様              2日 D様     3日 E様 とA列に一行挿入します。 A1セルに =IF(B1=Sheet2!A$1,ROW(),"") と入れて下までコピィすると、表示したい行のみにその行番号が出ます。 SHEET#2  A  B 1日 来場者     A様      B様     C様 A1セルには 条件(1日)を入れる B2セルには =VLOOKUP(SMALL(Sheet1!A:A,ROW(A1)),Sheet1!A:C,3,FALSE) と入れて下までコピィしておきます。 エラー処理加えると =IF(ISERROR(SMALL(Sheet2!A:A,ROW(A1))),"",VLOOKUP(SMALL(Sheet2!A:A,ROW(A1)),Sheet2!A:C,3,FALSE)) とでも入れてみてください。 式の意味を理解しやすくするには 別の空いている列に  =ROW(A1) =SMALL(Sheet2!A:A,ROW(A1)) と入れて下までコピィしてみるとわかりやすいと思います。

KAIKOKEN
質問者

お礼

今回は上記でご教示頂いた方法を採らせていただきました。 いろいろなデータへ応用ができたので、今日一日で予想以上の 成果が得られました。 ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

毎日のエクセルのここの質問や回答を見てないのですね。 >解決法が得られていなかったので・・ 毎日のように、このタイプの質問はあります。回答も似たようなものが3種程度出てきます。 (1)作業列を使わず関数だけの回答(式の理解が初心者には難しい) (2)作業列を使う方法 (3)その他 フィルタオプションの設定がお勧め この質問も、1条件の抜き出し問題です。 VLOOKUPやMATCH関数は見つかった最初行しか拾えないので、論外なのは常識です。 ーー 私は自称imogasi方式として、沢山回答してます。 Googleで「imogasi方式」で照会すれば、相当数の質問と回答が出ます。 上記(2)のタイプです。 回答を繰り返しておきます。 例データ Sheet1 A1:B7(データ部分) D列は作業列 A列   B列       D列 日付 氏名 連番 2008/11/8 a 1 2008/11/8 b 2 2008/11/8 c 3 2008/11/9 d 2008/11/10 e 2008/11/10 f D2の式は =IF(A2=Sheet2!$A$2,MAX($D$1:D1)+1,"") Sheet2 A2に指定の日を入れる A列  B列 日付 氏名 2008/11/8 B2の式は =INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$D$1:$D$100,0),COLUMN()) 下方向に式を複写する。 結果 日付 氏名 2008/11/8 a b c #N/A #N/Aを出さないようには =IF(ROW()-1>MAX(Sheet1!$D$100),"",INDEX(Sheet1!$A$1:$B$100,MATCH(ROW()-1,Sheet1!$D$1:$D$100,0),COLUMN()))

KAIKOKEN
質問者

お礼

imogasi方式をgoogleで検索すればよかったのですね。 いろいろな方法があることがわかりました。 ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2さんと同じやり方でSheet2のB2の式のみ異なるものです。 =INDEX(Sheet1!$B:$C,SMALL(Sheet1!$A:$A,ROW(A1)),COLUMN(B1)) 話の種に参戦してみました。

KAIKOKEN
質問者

お礼

今日のところは試してもおりませんが、後日消化させていただきます。 ありがとうございました。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.3

お試しを フィルタオプションによる抽出 Sheet1に   A   B 1 日付 来場者 2 1日 A様 3 1日 B様 4 1日 C様 5 2日 D様 6 3日 E様 Sheet2を表示し、A1セルに日付 A2セルに1日と入力する B1セルを選択する。 データメニュー → フィルタ → フィルタオプションの設定 → ポップアップされる「リスト又は選択範囲の・・・・」は「OK」 → フィルタオプションの・・・ → 抽出先は、指定した範囲を「オン」 → リスト範囲Sheet1!$A$1:$B$6 → 検索条件範囲Sheet2!$A$1:$A$2 → 抽出範囲Sheet2!$B$1 → OK Sheet2に   A  B   C 1 日付 日付 得意先 2 1日 1日  A様 3    1日  B様 4    1日  C様 と表示される

KAIKOKEN
質問者

お礼

実はこのフィルタオプションは今回利用しなかったのですが、 試してみたら今後活用できそうな気がしました。 勉強になりました。ありがとうございます。

回答No.1

オートフィルタやフィルタオプションの設定ではいけませんか? INDEX、MATCHを組み合わせることで検索した行の下のセルを表示させることが可能です。 Sheet1が日付順に並んでいれば可能です。 日付順じゃなくても数式で行う方法もありますが、 その場合、作業列を使うと良いでしょう

KAIKOKEN
質問者

お礼

いち早くご回答いただきありがとうございました。

関連するQ&A