• 締切済み

エクセルで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

専門家に質問してみよう