• 締切済み

Excel2000 VLOOKUPで検査値は一緒で、列内容が違うものの全てをひっぱりたい

kaisendonの回答

  • kaisendon
  • ベストアンサー率44% (114/257)
回答No.2

tasyさんすみません、後学の為に教えてください。 なぜ、作業列は作れないのですか? tasyさんが仰っている通り、似たような質問はいくつか見かけます。 そして、こういった物を作業列を使わずに行おうとすると、 No1さんのような感じになるのがお決まりのパターンです。 私が考えたのも同じような式です。 =IF(COUNTIF(Sheet1!$A$1:$A$15,$A$1)<ROW()-1,"",INDEX(Sheet1!$C$1:$C$15,SMALL(IF(Sheet1!$A$1:$A$15=$A$1,ROW(A$1:A$15)),ROW()-1))) (Ctrl + Shift Enter で配列数式として確定 → 下にコピー) この式って難しいですよね? 作業列を使わないで、一発で求める事ができる式が 必ずしも「いい式」だとは思えません。 この式は、作業列を使いたくないが為に、 無理やりまとめて肥大化した式のような気がしてならないのです。 求めたい通りの結果が返ってくればそれでOK、ならば、 それはそれでいいのですが、 後々のメンテナンス性とか、別の方に引き継ぐ時とかの事を考えると、 好ましい式とは言えないと思います。 誰かがSheet2のA列をうっかり触ってしまって編集状態になり、 慌ててEnterで確定したら、式の{  }が外れてしまって、 配列数式の意味を成さなくなってしまう、とか往々にしてありそうで怖いです。 レイアウトの関係とか、見た目とかの問題で作業列を使いたくないのであれば、『作業シート』を作ってそれを利用するのも一つの手だと思います。 例えば、作業シートのA1に =IF(Sheet1!A1=Sheet2!$A$1,ROW(),"") 同じくB1に =SMALL(A:A,ROW()) それぞれ、下に必用なだけコピー Sheet2のA2に =IF(COUNT(作業シート!A:A)<ROW()-1,"",INDEX(Sheet1!$C$1:$C$15,作業シート!B1)) このようにしておけば、作業シートのA列、B列の式が、 どのような処理を行っているのか明確になります。 ROW関数の返り値だけ気をつけていけば、 さほど難しい処理をしているわけではありません。 このように、式の可読性を高めて、自分が、あるいは他の人が見た時に、 少しでもわかりやすい処理にしておいた方が、後々何かと楽なのではないかと個人的には思っています。 まあ、こういったQ&Aの場合、 質問者は、一発で求めたい結果が返る式であれば、 数式が多少長くても、配列数式でも、なんでもいい、という傾向があるのは否めないですし、 回答者は、一発でドーンと答えの出る配列数式の方が回答しやすいという感じもあります。 まあ、私もその回答者の一人なんですけど(^_^;) (実際、作業列の式がどうだこうだ書くより、先に書いた配列数式だけ書いて終わり、の方がよっぽど楽ですしw) ただ、 > 1つ条件として、作業列は作れないということです。 これがどうにも引っかかって仕方がないのです。 もちろん社内で使うのであれば、何かしらの制限やら、ご事情やらがある事でしょうから、表の構成の自由度が低くなるのは仕方のない事なのでしょうけれども、 冒頭に書いたように、 『何故作業列が使えないのか?』 これがどうしてもわからないのです。 後学の為に、作業列が作れない訳を教えて頂けませんでしょうか?

tasy
質問者

お礼

kaisendonさん、ありがとうございます。 そうですね。作業列や作業シートを使用できればもっと明確なのかもしれません。 今回、それが出来ないのは、 データをMSQueryでMSAccessからひっぱってきており、 指定したsheet1にデータを出力させ、フォーマットとしてあるsheet2に式で反映させているのですが、 そのフォーマットを作成し、印刷後、次の分を作成する為にsheet1の全データを削除するようになっているからです。 これは仕様の為、修正できません。 シートを勝手に増やすことも出来ない決まりなのです。 フォーマットのsheet2の中に作業列を作るのも、禁止となっています。 これがどんなおかしな理由であっても、 どんなに正当性があっても動かせない決まりなので、 今回はどうすることも出来ないのです。 ですが、kaisendonさんの教えてくださった作業シート版は大変参考になります。 ありがとうございました。

関連するQ&A

  • エクセルで2つの条件を元に

    エクセル2007で名簿を作っています。 1ヶ月ごとにメンバーの順が変わります。 シート1(番号順に名簿を作りました)   A  B   C  1 1     山田 2 2     木村 3 3 副長 佐藤 4 4     鈴木 5 5 班長 田中 6 6     長田  シート2(こちらがメンバーに配る名簿です)   A   B  C   D 1 班長    1    3 2 田中    山田  鈴木 3 4 副長    2    4 5 佐藤    木村  長田 A2に田中,A5に佐藤を選んでくるのはvlookupで成功しました。 質問したいのは C列D列に上記の番号のようにシート1の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。  

  • excel2003 2列のデータを1列に

    エクセル2003にて 下記のように2列のデータを1列に表示させたいと思っております。 A列  B列              C列 田中 佐藤              田中 鈴木 池田 このように>      鈴木 後藤 内藤              後藤                     佐藤                     池田                     内藤 C列に入れる数式をお教えください。 よろしくお願いします。

  • Excel関数のifとvlookupの組合せについて

    10月というシートと11月というシートがあります。10月にあるIDが11月にもあるようなら、11月のシートに○をないようなら×を入れるような関数を作ろうと思っています。ifとvlookupを組み合わせたらどうにかなりそうだと思ったのですが、どうも思った結果が出ません。どなたか教えて下さい。 <10月シート>   A  B 1 555 田中  2 666 鈴木 3 777 山本 <11月シート>   A  B  C 1 999 本田 × 2 888 鈴木 × 3 666 鈴木 ○

  • VLOOKUPでお願いします

    VLOOKUPは初めてです。 (シートA)     A       B     C  1  コードNO.   名前   電話番号 2  0011112    佐藤   1111-3333 3  0022222    鈴木   1234-5544 4  1155444    山田   5566-1133 5  0333777    山下   8877-4477 (シートB)     A       B     C  1  コードNO.   名前   電話番号 2  0022222     3  0333777    シートAが元データです。 シートBのA列に他からコピーしたコードNO.を貼り付けると自動的に シートAからに該当する名前と電話番号をシートBのB列C列に表示させる。 どうか宜しくお願いいたします。

  • 【Excel】VLOOKUP関数について

    Excel2003を使用しています。 B列にコードNo.、D列に会社名が入力されている表(1)があります。 表(1)とは別のシートで、B列にコードNo.を入力すると、D列に会社名が表示されるように、VLOOKUP関数で検索範囲を表(1)としてD列に数式を入力しています。 これを逆に、D列に会社名を入力したら、B列にコードNo.が表示されるようにしたいのですが、B列に数式を入力する際、表(1)はこのまま利用できるのでしょうか?

  • vlookup関数で検索値を含む文字列を検索する方法

    vlookup関数で例えば E1のセルに=vlookup(D1,A:C,3,false)とした場合、D1が佐藤であれば、A列に「佐藤」がある場合には当然、「佐藤」がある行の3列目の値が返されますが、「佐藤」はなく「佐藤A」や「A佐藤」がある場合にもこれらがある行の値を返して欲しいのですが、いい方法はありませんでしょうか。*を使ってできると思ったのですがうまくいきません。上記例で、=vlookup("*佐藤*",A:C,3,false)とすればできますが、*佐藤*の部分はD1の引用を利用したいのです。  よろしくお願いします。

  • どなたか取り出し方を教えてください

    はじめまして、どなたか教えてください。たとえば Xというテーブルがあって。AとB2つのフィールドがあります A列 B列 鈴木 100 鈴木 125 鈴木 156 佐藤 354 佐藤 552 佐藤 132 田中 151 田中 99 田中 845 というテーブルから a列の中のものはdistinct 的な取り出し方をしつつ B列で最も大きな数字のa行を取り出したいのです 取り出したい結果 A列 B列 鈴木 156 佐藤 552 田中 845 とするにはどうすればよいのかさっぱりわかりません どなたか教えてくださいませ

  • エクセル関数

    シート1という名前のシートと シート2という名前のシート2つのシートがあります。 シート1は ・A列には従業員の氏名が入っています ↓このように  A 空欄 鈴木 伊藤 佐藤 ・資格名は見出しとしてB2~Q2まで入ってます(見出しとして) ↓シート1の全体はこのような感じ  A   B    C    D 空欄 資格1 資格2 資格3 鈴木 伊藤 佐藤 次にシート2は ・A列に個人コードが入ってます ・B列に名前が入ってます ・C列に資格名称が入ってます ・D列に資格取得日が入ってます ↓シートの全体はこのような感じ A  B   C    D 1  鈴木  資格1   6月 1  鈴木  資格2   7月 2  伊藤  資格3   8月 2  伊藤  資格1   9月  2  伊藤  資格2   10月 3  佐藤  資格3   11月 上記のようなシートがあります。 ここでシート1にシート2の値を返していきたいのですが 見ての通り書式はバラバラです 例えばシート2を見て鈴木は資格1、資格2、資格3を持っています 資格1だったら○をシート1の鈴木と資格1がぶつかってるセルに 資格2だったら○をシート1の鈴木と資格2がぶつかってるセルに 返していきたいのです 何か有効な関数などはありませんでしょうか? むしろ関数でできるのでしょうか? 説明が訳分からなくてすみません。 

  • VLOOKUP関数 列番号の設定の仕方教えて下さい

    VLOOKUP関数の列番号を 1、2、とかではなく、 計算して列番号を設定することはできますか? シート2 に入っているデータを参照して シート1 に関数をいれて、表示させたいと思っています。 シート2 データは 3行目に、項目(品名、(1)材料名、(2)数量、(2)材料名、(2)数量、...、(10)材料名、(10)数量) A列、 B列、 C列、 D列、 E列、...、 M列、 N列 クッキー、小麦粉、100、卵、1、...、砂糖、20 クラッカー、小麦粉、100、米粉、10、...、りんご、0.2 が入っていて、4行目から100行目くらいまでデータがはいっています。 シート1 の セルA5に品名を入力すると、 シート2の(1)材料名がセルA6に、 (1)数量がセルB6に、 (2)材料名がセルA7に、 (2)数量がセルB7に、 ... (10)材料名がセルA15に、 (10)数量がセルB15に、 入るように作りたいのですが、VLOOKUPの列番号を COLUMNやINDEXなど試してみましたが、エラーばかりで うまくできません...VLOOKUPでは無理なのでしょうか? どなたか詳しい方教えてください。よろしくお願いします・

  • Excel2003 関数を教えてください

    Excel2003にて作業しております。 ワークシートが県毎に分かれており、以下のような入力をしております。 北海道(シート1) A   B  C   D   E   F ―――――――――――――― No. 件数 ・・・ 担当  日付  ・・・ 1   60  ・・・ 佐藤   6/2  ・・・ 2   40  ・・・ 鈴木   6/6  ・・・ 3   70  ・・・ 佐藤   6/5  ・・・ 4   50  ・・・ 田中   6/6  ・・・ 青森県(シート2) A   B  C   D   E   F ―――――――――――――― No. 件数 ・・・ 担当  日付  ・・・ 1   30  ・・・ 加藤   6/3  ・・・ 2   20  ・・・ 田中   6/4  ・・・ 3   50  ・・・ 佐藤   6/3  ・・・ 4   10  ・・・ 田中   6/4  ・・・ 各担当者の合計件数・日付などを知りたいのですが、何かよい関数はないでしょうか? 以下のように担当者毎に別シートへ反映できれば理想的です。 A   B  C   D   E   F ―――――――――――――― No. 件数 ・・・ 担当  日付  ・・・ 1   60  ・・・ 佐藤   6/2  ・・・ 3   70  ・・・ 佐藤   6/5  ・・・ 3   50  ・・・ 佐藤   6/3  ・・・ できなければ各担当者の合計件数だけでも出したいのです。 ご教示ください。よろしくお願いいたします。