• ベストアンサー

エクセル関数について教えてください

添付の画像のように、表1(シート)の社員別に日付と定時の労働時間と、残業時間の書いてあるデータを表2(シート)の該当する社員の該当する日に関数により反映されるようにしたいのですが、関数で可能でしょうか? 表1は下にずらっとデータとして打ち込んでいきます。 表2はB2の黄色い部分がリストになっていて、月が変わるようになっていて、そこを変えると日付情報が変わるようにしてあります。 ※表2の4行目の日付は表示形式により“日”だけ表示しています。 説明不足かもしれませんが、どうぞよろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

Excel2007以降では,新しいSUMIFS関数を使い「ある日の」「Aさんの」「時間数など」を一発で求められます。 C6: =SUMIFS(Sheet1!$F:$F,Sheet1!$B:$B,C$4,Sheet1!$E:$E,$B6) C7: =SUMIFS(Sheet1!$G:$G,Sheet1!$B:$B,C$4,Sheet1!$E:$E,$B6) 該当がないときに関数で""にしてもかまいませんが,もっとシンプルに表範囲を選んでセルの書式設定の表示形式のユーザー定義を選び 0;;; とか 0.0;;; などのように設定して置くと良いでしょう。 以前のエクセルと互換性を持たさないとイケナイときは,だいぶ使い勝手が悪くなりますが =SUMPRODUCT((Sheet1!$B$1:$B$99=C$4)*(Sheet1!$E$1:$E$99=$B6), Sheet1!$F$1:$F$99) =SUMPRODUCT((Sheet1!$B$1:$B$99=C$4)*(Sheet1!$E$1:$E$99=$B6), Sheet1!$G$1:$G$99) などのようになります。

4k3s4r3
質問者

お礼

keithinさんありがとうございました! この関数でできること、知りませんでした。 大変助かりました!

その他の回答 (3)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

No1の回答の訂正です。 Sheet1のレイアウトを良く見たら、回答した数式では列番号がかなり違っていますね。 回答ではSheet1のA列からD列のデータで回答しています。 また、表2の名前の列もA列で回答していますが、画像ではB列ですね。 提示した数式のそれぞれの参照列を対応する列番号に書き換えてください。 ただし、提示した数式を多数のセルに入力すると再計算に時間がかかり、運用面で実用的でなくなる可能性も考えられます。 このようなケースでは補助列を使って計算負荷をすくなるする数式で対応するほうが良いかもしれません。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 泥臭い方法になりますが、一例です。 ↓の画像のようにSheet1に作業用の列を設けています。 作業列E2セルは =A2&B2 としてオートフィルでずぃ~~~!っと下へコピーしておきます。 そしてSheet2のB6セルは =IF(COUNTIF(Sheet1!$E:$E,B$4&$A6),INDEX(Sheet1!$C:$C,MATCH(B$4&$A6,Sheet1!$E:$E,0)),"") B7セルは =IF(COUNTIF(Sheet1!$E:$E,B$4&$A6),INDEX(Sheet1!$D:$D,MATCH(B$4&$A6,Sheet1!$E:$E,0)),"") という数式を入れます。 B6・B7セルを範囲指定したままB7セルのフィルハンドルで右へコピー! 2行を選択したまま下へ2行ずつオートフィルでコピーすると 画像のような感じになります。 以上、参考になれば良いのですが・・・m(__)m

4k3s4r3
質問者

お礼

tom04さんありがとうございます。 参考になりました!

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

例示のレイアウトなら以下のような関数を入力し、C6:C7セルを選択して、下方向および右方向にオートフィルコピーしてください(Excel2007を使用している場合)。 C6セル =IF(COUNTIFS(Sheet1!$A$2:$A$200,C$4,Sheet1!$B$2:$B$200,$A6),INDEX(Sheet1!$C:$C,MAX(INDEX((Sheet1!$A$2:$A$200=C$4)*(Sheet1!$B$2:$B$200=$A6)*ROW($A$2:$A$200),))),"") C7セル =IF(COUNTIFS(Sheet1!$A$2:$A$200,C$4,Sheet1!$B$2:$B$200,$A6),INDEX(Sheet1!$D:$D,MAX(INDEX((Sheet1!$A$2:$A$200=C$4)*(Sheet1!$B$2:$B$200=$A6)*ROW($A$2:$A$200),))),"")

4k3s4r3
質問者

お礼

MackyNo1さんありがとうございます。 関数はいろいろな表現で目的を達成できるのですね。 勉強させていただきました!

関連するQ&A

  • エクセルの関数についてです、よろしくお願いします

    エクセルの関数についてです、よろしくお願いします。 sheet1に以下の様なデータが何百行とあります。 A B C D E 日付  顧客名  品名  数量  金額 上記のsheet1のデータを基にsheet2へ抽出して転記する ものを作りたいと考えています。 具体的に言いますと sheet2のA1に2014/11/21、 B1に2014/12/20、 C1に ○○商店と入力するとその下に A      B     C     D 日付   品名   数量 金額 2014/11/23  りんご 5 750 2014/11/28  みかん 2 300 2014/12/2   いちご 3 600 2014/12/10  りんご 5 750 sheet1のリストから該当するものを引っ張ってきて sheet2へ表示させるものです オートフィルタ等でなく、関数で出来ないでしょうか お詳しい先生方よろしくお願いします。

  • エクセルの日付関数について教えてください。

    エクセルの日付関数について教えてください。 上司から、データの修正をかけたごとの表を提出するようにいわれています。 エクセルのToday関数ですと、ファイルを開いた日付に変更されてしまうので 困っています。 ファイルを開いただけでは変更されず、内容を更新したときだけ、その処理日が表示されるような 関数があれば教えてください。 ひとつのファイルに何枚かのシートがあるので できればシートごとにできればよいのですが 無理でしたら、別ファイルを作ります。 よろしくお願いします。

  • excelの関数について

    勤怠表をexcelで作成しています。 休みとノー残業日を同じファイル内でシートを分けて入力しています。 例:休み→シートA   ノー残業日→シートB 休みが記入されているシートAにノー残業日も反映させたいのですが、既にシートAに『休』が入力されている場合、『休』を優先して表示させ『ノー残業日』を前日にずらして表示させたいのです。 とても困っています。 どなたか解決方法を教えて下さい。 お願いします。

  • エクセルの関数を教えてください

    エクセルで(シート1)に日付を縦に3か月分ぐらい並べて違うシート(シート2)のセルに日付を入力します。 (シート2)で入力した日を(シート1)の日付の横のセルに●を表示させる事は関数で可能ですか? 例えば、(シート2)に【7月20日】と入力したら(シート1)の【7月20日】の横のセルに●を表示させたいんです。 仕事の報告書で毎日報告書を出す訳ではないので報告書を作った日(日付を入力した日)を一覧表で●が表示されていれば一目でいつ報告書を書いたか分かるようにしたいんです。 分かる方よろしくお願いします。

  • Excelの関数について教えてください。

    いつもありがとうございます。 Excelの関数について質問します。 日付の入った表があります。 毎日データを入力します。 次に別のシートで毎月のデータを管理したいんです。 毎月1日のデータを毎月のデータのシートに移したいんです。 日付だけならDAY関数で取り出せるんですが・・・ ご指導の程、よろしくお願い致します。

  • ExcelでIndexとMatch関数が使いこなせない

    すみません、カテゴリを間違えてまして、再度投稿いたします。 有給管理表をExcelで作成しています。 シート1に社員のデータ表を入力してあり、 シート2には有給が発生する社員へ有給の残日数や 付与日に関するお知らせの案内状をB5サイズで作っています。 シート1のデータを拾って、シート2の案内状へ反映させる際、 付与日や残日数などはVlookupで参照できるのですが、 社員番号は退職した社員がいるため番号が飛んでいて うまくできません。 IndexやMatch関数を使えばなんとかなりそうだと思い やってみましたが、VALUE!が表示されてしまいます。 どなたかうまくいく関数を教えて頂けますでしょうか? シート1のデータ例  A列   B列   C列   D列    E列 社員番号  氏名  入社日  付与日   付与日数 100001   くま  2007/4/1  2007/10/1  10 100003   たぬき 2007/5/1  2007/11/1  10 100005   うさぎ 2007/5/10 2007/5/10  10  100010   きつね 2007/6/1  2007/12/1  10 シート2(例)ページ1    B列   C列 B1 社員番号  100001←ここに式を入れたい B2 社員氏名  くま  さん(vlookupでC1を拾ってくる) B4 あなたの有給付与日は  2007/10/1 です。付与日数は 10 日です・・・・・・。 シート2 ページ2 B30 社員番号  100003 (←ページ1の次の該当者を拾いたい) B31 社員氏名  たぬき  さん B33 あなたの有給付与日は 2007/11/1 です。 付与日数は 10 日です・・・・・・。 このような感じです。社員番号が飛んでいても下の行を拾っていくような関数はありますでしょうか?(Index、Match関数以外でも結構です)

  • Excelの関数について

    sheet1で作成した表の合計数(使用関数:sumproduct)を sheet2で作成している表に反映させたいのですが、 VLOOKUPを使うと必ずエラーになってしまいます。 VLOOKUPと同じような方法で条件ごとに検索して データを引き出す事が可能な関数はないでしょうか? 解り辛いかもですが、よろしくお願いします。

  • エクセル VLOOP関数

    エクセル初心者です。 エクセル2003を練習中なのですが 今、下画像の上段のようなデータのシートを作成しました。 シートは左の日付を3行セル結合しています。 このシートのデータを、画像下段の表のように 関数で表引きしたいのです。 下段の表は、左の日付を2行セル結合しています。 関数(VLOOPUP関数とINDEX関数)の使い方が、今一つ分かりませんでした。 どんな数式を入力していけばいいのでしょうか。 お願いします。

  • Excel の関数は複数の表に反映されない?

    学校で細かいデータ集計を任されてしまいました。  何度やってもうまくいきません。教えてください。  同じExel上の4月シート、5月シートというようにしてそれぞれの月のデータ集計を月ごとに合計を出し、それら12か月のデータを集約した新たなシートの表に1年間の表にまとめようとすると、全く違った計算式(関数というのでしょうか)が出てしまいます。  言っていることが分かりにくいかもしれませんが、関数を出すために「レ」のところをクリックするとSUMとかの文字が出ますよね。そこでたとえば4月のシートで集約した合計データを、「4!AH47」とか入れて、総集計のシートの表にそっくりコピーされるようにします。5月シートで作った合計を、「5!AH47」とか入れて、総集計のシートの表にそっくりコピーしていき、総集計データで4月から3月までの合計を、一覧表自動的に反映されるようにしたいのですが、関数式のSUM(AH4:AH13)などとして、合計を出るように式はいれるのですが、答えに反映されるべきところ、ここでは合計が出て欲しいのになぜか%のデータが出てしまいます。○○○○%などとおかしな数値が表示されてしまうのです。  SUMでなくひとつひとつのセルの記号と+記号を次々に手動で入れても%が表示されるのです。  どこが間違っているのか、それとも何度も転載はできないのでしょうか。

  • エクセル関数でシート移動するとき

    同book内の「リストA」シートから「1」シートへデータ転送する際 関数は「1」シートの、データを移したいセルに 『='リストA'!A1』などと入れると思うのですが「''」が入りません。 『=リストA!A1』でもデータは移動するのですが 「リストA」シートのA1セルが空欄の場合「1」シートの移動先が0と表示されてしまします。(「1」シートの移動先は表になっています) 尚 同book内で「1」シートから「別のシート」への転送もしています。 その場合は 空欄は空欄で表示され、関数も「''」が表示されていますが、 その関数をコピーして貼り付けても「''」だけ消えてしまいます。 セルの設定は 特になにもしていないのですが なにか手順に落ち度があるのか 原因が不明で困っています。 空欄を空欄のまま表示させたいのですが どうしたらよいでしょうか。。 ご存知の方がいましたら アドバイスよろしくお願いします<(__*)>

専門家に質問してみよう