アプリ版:「スタンプのみでお礼する」機能のリリースについて

excelのデータ抽出?検索?についておしえてください。

エクセル2003で sheet1に次のようなデータがあります。

  A列  B列  C列     D列  E列 ・・・
1 組   番号  氏名     古典  現文 ・・・ 
2 1   1   青木 優   
3 1   2   池田 洋子  
4 1   3   植村 美紀  



sheet2には1組の成績が sheet3には2組の成績が入っています。

クラスによって科目が違います。

この「氏名」と1行目の「科目名」が一致するデータを
他のシートから読み出してくる関数がありませんでしょうか

青木さんの古典を1組のシートから読み出すといった感じです。


説明がへたで 申し訳ないのですが
うまく検索ができなくて困っています。

ぜひ くわしいかた教えてください。
どうぞ よろしくおねがいします。

A 回答 (5件)

補足をお願いします。



sheet2とsheet3のデータは、どの列にどの項目が配列されていますか?
1行目は見出し行で、明細行は2行目以降でしょうか?

読み出した成績は、sheet1のどの列に表示されるのですか?

この回答への補足

sheet2には


  A列  B列  C列     D列  E列 ・・・
1 組   番号  氏名     古典  現社 ・・・ 
2 1   1   青木 優   56   77
3 1   2   池田 洋子  78   66
4 1   3   植村 美紀  80   56




sheet3には

  A列  B列  C列     D列  E列  ・・・
1 組   番号  氏名     現文  世界史 ・・・ 
2 2   1   佐伯 力   86   77
3 2   2   志垣 洋   58   66
4 2   3   末武 剛   70   86



といった漢字に並んでいます。

クラスによって 教科がまちまちです。

それをsheet1のその名前と科目が交差しているセルに
表示したいのです。

説明がたりなくてすみません。

補足日時:2009/12/23 09:07
    • good
    • 0

例えばシート2やシート3では1行目に項目名があり、A1セルには番号、B1セルには氏名、C1セルから横の列には科目名が並んでいるとします。


そこでシート1ですがお示しの表があるとして、氏名で検索しますと同じ組でも同じ氏名の人がいる場合もありますので、検索にはここでは番号を使うことにします。また、科目についてはX1セルまで使用できることにします。
シート1のD2セルには次の式を入力し、右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(OR($B2="",D$1="",COUNTIF(INDIRECT("Sheet"&($A2+1)&"!A:A"),$B2)=0,COUNTIF(INDIRECT("Sheet"&($A2+1)&"!1:1"),D$1)=0),"",INDEX(INDIRECT("Sheet"&($A2+1)&"!A:X"),MATCH($B2,INDIRECT("Sheet"&($A2+1)&"!A:A"),0),MATCH(D$1,INDIRECT("Sheet"&($A2+1)&"!1:1"),0)))
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
理解するのに少し時間がかかりそうなので
先にお礼だけかかせていただきました。

試してみます。
本当に助かります。
ありがとうございました!

お礼日時:2009/12/24 15:17

すでにKURUMITOさんからご回答があり解決済みかと思いますが、補足をお願いした立場からの一例です。



sheet1のd2につぎの式を入力し、縦横に必要数ドラッグ

=IF(ISNA(INDEX(INDIRECT("Sheet"&($A2+1)&"!$D$2:$M$51"),MATCH($B2,INDIRECT("Sheet"&($A2+1)&"!$B$2:$B$51"),0),MATCH(D$1,INDIRECT("Sheet"&($A2+1)&"!$D$1:$M$1"),0))),"",INDEX(INDIRECT("Sheet"&($A2+1)&"!$D$2:$M$51"),MATCH($B2,INDIRECT("Sheet"&($A2+1)&"!$B$2:$B$51"),0),MATCH(D$1,INDIRECT("Sheet"&($A2+1)&"!$D$1:$M$1"),0)))

科目数10個、各クラス人員50名まで対応していますので、必要により式の数値等を変更してください。

なお。2007であれば下記のようにIFERROR関数で少しスッキリできるのですが・・

=IFERROR(INDEX(INDIRECT("Sheet"&($A2+1)&"!$D$2:$M$51"),MATCH($B2,INDIRECT("Sheet"&($A2+1)&"!$B$2:$B$51"),0),MATCH(J$1,INDIRECT("Sheet"&($A2+1)&"!$D$1:$M$1"),0)),"")

なお、関数式は、この画面からEXCELへコピー貼付ができます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

理解するのに少し時間がかかりそうなので
先にお礼だけかかせていただきました。

2007になるとまた違うのですね。
とりあえず2003で試してみます。

本当に助かりました。
ありがとうございました!

お礼日時:2009/12/24 15:38

こんばんは!


すでに回答は出ていますので、参考程度で・・・

当方使用のExcel2003での方法になります。
↓の画像で説明させていただきます。
Sheet1に数式を入力する前に一手間・・・いや、二手間かけています。

各組のデータは科目が10科目・生徒数が50名まで対応できるようにしてみました。

まず、1組のSheet2のD2~M52セルを範囲指定 → メニュー → 挿入 → 名前 → 定義 から
名前欄に _1 と名前定義します。
(数値が頭に入るとたぶん名前定義できないような気がしたので、とりあえずアンダーバーを入れておきます)

同じく、Sheet2の氏名欄のC2~C52セルを範囲指定し、
名前定義で _1氏名 と名前定義

Sheet2の科目のD1~M1セルを範囲指定し
同様に、_1科目 と名前定義

以上の操作を各組全て名前定義づけしておきます。

最後にSheet1のD2セルに
=IF(OR($C2="",ISERROR(INDEX(INDIRECT("_"&$A2),MATCH($C2,INDIRECT("_"&$A2&"氏名"),0),MATCH(D$1,INDIRECT("_"&$A2&"科目"),0)))),"",INDEX(INDIRECT("_"&$A2),MATCH($C2,INDIRECT("_"&$A2&"氏名"),0),MATCH(D$1,INDIRECT("_"&$A2&"科目"),0)))

という数式を入れ、オートフィルで列方向と行方向にコピーすると
画像のような感じになります。

以上、長々と書きましたが、
参考になれば幸いです。
的外れなら読み流してくださいね。m(__)m
「excelのデータ抽出?検索?についてお」の回答画像4
    • good
    • 0
この回答へのお礼

ありがとうございます!
画像まで入れていただいて 本当にわかりやすくて助かります。
とっても参考になりました。

まだ出来ていないのでチャレンジしてみます!
ありがとうございました。

お礼日時:2009/12/28 08:26

No.4です!


たびたびごめんなさい。

前回書き忘れましたが、
名前定義する場合に
_(アンダーバー)の後の数値は各組の数値で名前定義してください。

仮に2組なら _2 、 3組なら _3 ・・・のような感じです。

どうも何度も失礼しました。m(__)m
    • good
    • 0
この回答へのお礼

重ねて御礼申し上げます。
本当に丁寧に教えていただいてありがとうございます。

がんばってみます。

お礼日時:2009/12/28 08:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!