• 締切済み

エクセルで2つの条件を満たした列をHLOOKUPで

エクセルで、1行目と2行目の条件を満たした列をHLOOKUPで参照したいです。 人件費の表をつくっています。 給与明細の名前の欄をプルダウンで変更可能にし、名前を変えればその人の出勤時間が表示されるようにしたいです。 時間を記入するシート1は下のようになってます A     B     C     D 山田   山田   鈴木   鈴木 出勤   退勤   出勤   退勤 14    21    18    23 16    21    18    22 15    23    17    23 16    22    17    21 1行目が氏名 2行目が出勤か退勤か 3行目以降が時間記入欄です。 別シート2に給与明細がありまして A     B     C 氏名   山田 出退   出勤   退勤 1日   14    21 2日   16    21 3日   15    23 のように参照されています 氏名の「山田」の部分がプルダウンリストで選べるようになっていて この氏名の部分を「山田」から「鈴木」に変更すると自動的に出勤と退勤の時間が「鈴木」のものへ変更になるようにしたいです。 やりたいことは以下の事です シート2の氏名が「山田」であれば例のシート2のまま シート2の氏名の部分を「山田」から「鈴木」へ変更すれば B4、B5、B6セルは18、18、17に変わり C4、C5、C6セルは23、22,23に変化するようにしたいです。 関連しそうなIF,AND,MATCH,HLOOKUP等組み合わせてみましたが、どうもうまくいきません。 わかりづらいと思いますが、是非教えて頂ければ幸いですので宜しくお願いします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

シート1にお示しのデータがあって、1行目には氏名が2行目には項目名が、3行目以降にはデータがあるとします。 シート2ではB1セルに氏名が入力されるとして、2行目にはA2セルに出退、B2セルに出勤、C2セルに退勤の文字がそれぞれ入っているとします。 A3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B3="","",COUNT(B$3:B3)&"日") B3セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF($B$1="","",IF(OR(COLUMN(A1)>2,INDEX(Sheet1!$A:$XX,ROW(A3),MATCH($B$1,Sheet1!$1:$1,0)+COLUMN(A1)-1)=0),"",INDEX(Sheet1!$A:$XX,ROW(A3),MATCH($B$1,Sheet1!$1:$1,0)+COLUMN(A1)-1)))

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 御質問文中にあるシート1には、日付けが記されていませんから、このままでは検索する事が不可能です。  ですから、シート1のデザインを、次の様に変更して下さい。     A列  B列  C列  D列  E列 1行目    山田    鈴木 2行目 日付 出勤 退勤 出勤 退勤 3行目 1日  14  21  18  23 4行目 2日  16  21  18  22 5行目 3日  15  23  17  23 6行目 4日  16  22  17  21  そして、Sheet2のB3セルに次の数式を入力して下さい。 =IF(OR($B$1="",$A3="",COUNTIF(Sheet1!$1:$1,$B$1)=0,COUNTIF(Sheet1!$A:$A,$A3)=0),"",OFFSET(Sheet1!$A$2,MATCH($A3,Sheet1!$A$3:$A$33),MATCH($B$1,Sheet1!$1:$1)+COLUMNS($B:B)-1))  次に、Sheet2のB3セルをコピーして、Sheet2のB3~C33の範囲に貼り付けて下さい。  後は、Sheet2のB1セルに氏名を入力すると、自動的に時間が表示されます。  尚、OFFSET関数の代わりにINDEX関数を使う方法もあります。 =IF(OR($B$1="",$A3="",COUNTIF(Sheet1!$1:$1,$B$1)=0,COUNTIF(Sheet1!$A:$A,$A3)=0),"",INDEX(Sheet1!$3:$33,MATCH($A3,Sheet1!$A$3:$A$33),MATCH($B$1,Sheet1!$1:$1)+COLUMNS($B:B)-1))  それから、Sheet1のA列に並んでいる日付の範囲とSheet2のA列に並んでいる日付の範囲が、必ず同じである場合には、次の様な数式にする事も出来ます。 =IF(OR($B$1="",$A3="",COUNTIF(Sheet1!$1:$1,$B$1)=0),"",OFFSET(Sheet1!$A$2,ROWS($3:3),MATCH($B$1,Sheet1!$1:$1)+COLUMNS($B:B)-1)) =IF(OR($B$1="",$A3="",COUNTIF(Sheet1!$1:$1,$B$1)=0),"",INDEX(Sheet1!$3:$33,ROWS($3:3),MATCH($B$1,Sheet1!$1:$1)+COLUMNS($B:B)-1))

関連するQ&A

  • Excelについ教えてください!

    会社で、アルバイトの勤務時間を処理しなくてはなりません。 下記のようなexcelのファイルが1か月単位であがってきます。    A   B   C   D 1  4/10 山田 16:00 退勤 2  4/10 佐藤 14:00 出勤 3  4/10 田中 14:00 退勤 4  4/10 山田 12:00 出勤 5  4/10 田中 9:00 出勤 6  4/9 田中 16:00 退勤 7  4/9 佐藤 15:00 退勤 これを、   A   B   C   D 1    出勤 退勤 2 4/9 ●● ●● 3 4/10 ●● ●● 4 4/11●● ●●     このように別シートに個人毎に日報として抽出したいのですが、うまくいきません。 vlookupだと一つの条件しか指定できませんよね・・・? 例えば、4/10の、且つ、山田の、且つ”出勤”の時間を(B3に)絞り出すなんてことはexcelの関数ではできないのでしょうか? よろしくお願いします。

  • HLOOKUPについて

    データの一覧がシート1~12まで入っています。(1ヶ月ごとに作ってあります。) その中から拾い出しをするようにしたのですが、 正しい値を拾ってきてくれません。 数式はHLOOKUP(C36,4月,2)としてあります。 データと同じシート状に作っているのですがそれが問題なのでしょうか? シートのデータ内容は A | B | C・・・・ 1 | 16-013 | 16-020 | 17-103 2 | 200 | 500 | 300 3 | 10 | 100 | 200 このような感じです。 数式のC36には1行目の16-020等が入ります。

  • EXCELのHLOOKUPで等間隔でコピーする方法

    HLOOKUP(R1,参照用シート!100,99,2,0) HLOOKUP(R2,参照用シート!103,102,2,0) HLOOKUP(R3,参照用シート!106,105,2,0) ... と、終わりにある2,0の部分は変えず ほかの参照先を等間隔でコピーをしたい場合 どうすれば等間隔でコピーできるでしょうか? 1行目と2行目を選択し、オートフィルを使用したら HLOOKUP(R1,参照用シート!100,99,2,0) HLOOKUP(R2,参照用シート!103,102,2,0) HLOOKUP(R1,参照用シート!101,100,2,0) HLOOKUP(R2,参照用シート!104,103,2,0) ... と、上手くコピーすることができませんでした。 参照先のシートには数千行データがあり とても手作業ではできず、困っております。 なにかいい手段をご教示頂けないでしょうか。

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • エクセル2003で勤務シフト表を作成 退勤時刻を表示させる関数を探しています。

    エクセル2003にて、職場の勤務シフト表を以下のように作成中です。   A   B   C   D   E   F   G   H   I   J   1     出   退   14   15  16   17  18  19  20 2山田  14  18   A   A   B   B 3佐藤  15  19       B   A   A   A 4鈴木  5福田  16  20           C   C   C   C 6             14   15  16   17  18  19  20 この様な形式です。 1.D2:J5セルには、ポジションの略称が入ります。  (例:2行の山田さんは14時~16時までAポジション、16時~18時までBポジション。4行の鈴木さんはこの日はお休み)  2.各時間帯の適正人数を考えながら、D2:J5セルにポジション略称でシフトを入力していきます。 3.上記2.の作業後、出勤時刻をB列に、退勤時刻をC列に自動的に表示されるようにしたいのです。   4.出勤時刻に関しては、なんとか自身で調べてB2セルの場合、   =IF(COUNTBLANK(D2:J2)=7,"",HLOOKUP("*",$D2:$J$6,7-ROW(),FALSE)) とすることで解決できました。 【ここから困っています。】 5.退勤時刻も同じように自動表示させたいのですが、ここで行き詰ってしまいました。   解決策をお教えいただけると助かります。   宜しくお願いいたします。        

  • HLOOKUP関数で連続したセルの検索について

    エクセル2000を使ってます。 HLOOKUPについて教えて下さい。 例えば、SHEET.1に     リンゴ みかん  1月1日  1   1   1月1日  2   3   1月2日  3   1   1月3日  4   2    ・  ・  ・ 12月31日 1   2 とした場合で、 SHEET.2のB1のセルに「みかん」と入力した場合、SHEET.1のみかんの列を全部複写するようにしたいのです。 とりあえずSHEET.2のB2のセルに =HLOOKUP(B1,'Sheet1'$2:$5000,2,0)と入力し、 B3のセルに =HLOOKUP(B1,'Sheet1'$2:$5000,3,0)と返す行を一つずつ増やしてたのですが、行があまりにも多くて時間が掛かるので簡単に出来る方法があれば教えて下さい。 また、他にもっと簡単な関数とかがあれば教えて下さい。 よろしくお願いします。

  • EXCELにて3つの条件を違うシートに抽出したいです。

    エクセルで元データ(sheet1)を3つの条件にあったデータを別シート(sheet2)に抽出し、 なおかつ抽出したデータを元データ(sheet1)から消去する方法はありますか? できれば関数でお願いします。 ☆シート1☆※元データ   A B C D 1 氏名 出身 作業 時間 2 鈴木 愛知 1 1.0 3 渡辺 静岡 2 1.5 4 鈴木 愛知 2 2.0 5 松坂 岐阜 3 0.5 6 鈴木 愛知 3 1.0 7 鈴木 愛知 4 1.5 8 森田 三重 2 0.5 ☆シート2☆ A B C D 1 氏名 出身 作業 時間 2 鈴木 愛知 1 1.0 3 鈴木 愛知 2 2.0 4 鈴木 愛知 3 1.0 5 鈴木 愛知 4 1.5 補足 ・シート2の条件として『氏名』と『出身』が同じでなおかつ『作業』の1,2,3,4がある人のみ。 このとき、『作業』が4がある人のみ抽出したいです。 ・抽出したときにシート1に抽出したデータ(例では鈴木)が消えるようにしたいです。 説明が不十分で伝わりにくいとは思いますが、 よろしくお願いします。

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • エクセル 2列に並べた氏名のチェック

        A列       B列      C列 1 山田 太郎   山田 太郎   2 山田 花子   吉本 喜劇 3 吉本 喜劇   挟間 寛餅 4 挟間 寛餅   池野 めだ シート(1)にシート(2)からコピーしてきた氏名をB列に貼り付け、 AとBの氏名が同じかどうかC列に結果を出して確認したい。 C列に =IF(A1=B1,"○","×")と入れてみても 見た目は同じ「山田 太郎」でも×と出てしまいます。 (1)何が間違って「×」と表示されるのか? (2)C列に結果を出す方法は? わかりづらい説明かもしれませんが、よろしくお願いします。

  • エクセルデータベースの結合について

    2つのエクセルデータを結合したいのですが、欠番があり、うまくいきません うまく説明できなく、分かりにくくて申し訳ありませんが、具体的には   A   B    C             A    B    C        1 No. 氏名  1月金額         1 No.   氏名  2月金額     2 001 田中  500           2 002  山田   100 3 002 山田  300    と      3 003  鈴木   150 4 003 鈴木  200            このようなそれぞれのデータがあります。右のデータはNo.001田中が欠番になってます。 このままコピーして貼り付けると一行ずれてしまします。ずらして貼り付ければいいのですが、数百人ぐらいのデータで、かなりの欠番がありますので手作業でずらして貼り付けるには効率的でなく大変です。  A   B    C      D                1 No. 氏名  1月金額   2月金額           2 001 田中  500     空欄       3 002 山田  300     100       4 003 鈴木  200     150      のように自動的に結合する方法があれば教えていただきたいのですが、なにぶん初心者なもので困っております。なにとぞ宜しくお願い致します。

専門家に質問してみよう