• ベストアンサー

シフト表での労働時間の累計の出し方。

毎回質問ばかりで申し訳ありません。 例えばA1に社員番号を入れると、A2に社員氏名を表示するようにVLOOKUPで式を入れてます。 日々の労働時間を累計していき、AB2に当月の累計時間を表示。 AC2に各月の累計を計算するようにしています。 各月ごと12枚のシートで作っているのですが、4月度は=AB2で5月度からは=AB2+'4月'!AC2で累計していってるのですが、これだと各月でシフト表の社員の並びが変わると別の社員の前月分と合算していきます。 社員番号を呼び出して累計を求めるにはどのような計算式が有効ですか? わかりにくくてすみませんが、よろしくご教授下さい。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.1

うーん........ まだシートの構成がわからない。 こんな感じですか? 4月シート ___A__AB__AC 1___1_4月計_累計_ 2_山田__180__700_ 3___2_4月計_累計_ 4_斉藤__160__580_ 5___3_4月計_累計_ 6_鈴木__170__600_ 5月シート ___A__AB__AC 1___1_5月計_累計_ 2_山田__170__870_ 3___3_5月計_累計_ 4_鈴木__160__760_ 5___4_5月計_累計_ 6_大田___80__80_ AC2 =AB2+IF(COUNTIF('4月'!A:A,A1),INDEX('4月'!AC:AC,MATCH(A1,'4月'!A:A,0)+1)) 下方向・↓

tatsuda
質問者

お礼

すみません・・・ =AB2+IF(COUNTIF('4月'!A:A,A1),INDEX('4月'!AC:AC,MATCH(A1,'4月'!A:A,0)+1))の'4月'!の後のA:Aは何を参照してるのですか?

tatsuda
質問者

補足

全体像はこんな感じです。 また次回、細部をアップします。

その他の回答 (2)

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.3

4.0マクロ関数の方法 [あちこちのサイトで有名だが絶滅寸前] 1. 挿入 →名前 →定義 →名前:  シート名一覧 →参照範囲: =GET.WORKBOOK(1)&T(NOW()) 2. 挿入 →名前 →定義 →名前:  シート番号 →参照範囲: =GET.DOCUMENT(87)+NOW()*0 ※これで【左隣のシートのB1セル】は、以下の式で参照可能に。 INDIRECT("'"&INDEX(シート名一覧,シート番号-1)&"'!B1") 【右隣のシートのB1セル】なら INDIRECT("'"&INDEX(シート名一覧,シート番号+1)&"'!B1") 3. 左端シート __A_ 1_10_ 2番目シート __A_ 1_20_ 3番目シート __A_ 1_30_ だとして、すべてのシートお隣のB1に B1 =A1+IF(シート番号>1,INDIRECT("'"&INDEX(シート名一覧,シート番号-1)&"'!B1")) 4. これでB1に累計 左端シート __A_B_ 1_10_10_ 番目シート __A_B_ 1_20_30_ 3番目シート __A_B_ 1_30_60_

tatsuda
質問者

お礼

本当にいろいろとありがとうございました。 感謝、感謝です! おかげさまで納得行く表が完成しました。 マクロを使えばもっと簡単にできるんですか? 一切マクロは使えないので、これから勉強したいと思います。 よく聞く『VBA』ってのとマクロは別物なんですか? 本屋に行っても種類がいっぱいあってどれを教科書にしていいか迷ってしまいます。 お薦めの参考書等あれば最後にお聞かせ下さい。

tatsuda
質問者

補足

おはようございます。 ん~、これはまた難しそうですね・・・ 何日かかけてチャレンジしてみます。 それと、最初に言われてた祝日リストと言うのを  http://www.eva.hi-ho.ne.jp/ohtake/excel/calender2.htm から取り込み試してみたんですが上手くいきませんでした。 いい方法をご伝授下さい。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.2

・A列全体という意味です。 範囲が決まっているなら、A$1:A$100などでもいいですよ。 例えばAB4+INDEX('4月'!AC:AC,MATCH(3,'4月'!A:A,0)+1)) の意味を書きます。 ・MATCH(3,'4月'!A:A,0)は 4月シートのA列最初から3を探しなさい。何番目?という意味ですので、 4月シート ___A 1___1 2_山田 3___2 4_斉藤 5___3←見つけ!5番目 6_鈴木 上の表でしたら5を返します。 ・ひとつ下にずらしましょう。 MATCH(3,'4月'!A:A,0)+1は6を返します。 4月シート ___A 1___1 2_山田 3___2 4_斉藤 5___3 6_鈴木←ひとつ下にずらして、6番目 ・その6をおみやげにして今度はずーーっと右のAC列を上から数えましょう。 INDEX('4月'!AC:AC,6)は、AC列全体の6番目は何ですか?という意味です。 4月シート ___A__AC 1___1_累計_ 2_山田__700_ 3___2_累計_ 4_斉藤__580_ 5___3_累計_ 6_鈴木__600_←AC列の上から6番目はここ。 ・最後に5月シートに引っ越します。上で抽出した600を左隣の当月計にたしましょう。 AB2+600 5月シート ___A__AB__AC 1___1_5月計_累計_ 2_山田__170__870_ 3___3_5月計_累計_ 4_鈴木__160__160+600 これで3番の鈴木さんの累計が760時間とわかりました。 以上、AB4+INDEX('4月'!AC:AC,MATCH(3,'4月'!A:A,0)+1)) の意味でした。

tatsuda
質問者

補足

ブラボー! お見事です!! 昨日はすみません、眠りに堕ちてお返事を確認もしてませんでした。 ご丁寧に教えて下さっているのに、未熟者は理解するのに時間がかかり過ぎました。 =AI11+IF(COUNTIF('5月'!A$9:A$40,A9),INDEX('4月'!AM$9:AM$40,MATCH(A9,'4月'!A$9:A$40,0)+2)) これはシート5月に入れた計算式です。 見事、私が求めている数値を導き出してくれました。 ここでもう一点質問よろしいですか? '4月'は'4月のシートの'って意味ですよね??これを'4月'ではなく、'前月の'とか'左隣のシートの'とかにできませんか? 重ね重ね申し訳ありませんが、宜しくお願いします。

関連するQ&A

専門家に質問してみよう