• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルについて - 条件付きセルのカウント)

エクセルで条件付きセルのカウント方法

このQ&Aのポイント
  • エクセルでシフト表を作成し、条件付きカウントを使って出勤時間を計算する方法について質問があります。
  • 特に日曜日の時給アップ分の計算について困っています。日曜日のセルのみを選択し、9, 13, 17, 18, Fの数をカウントし、出勤時間を掛けて合計を出したいと考えています。
  • また、シフト表の曜日をずらした場合にも正確にカウントが機能するようにしたいです。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

たとえば日曜日(一行目に曜日があるとして)の9(2行目にあるとして)なら =SUMPRODUCT((1:1="日")*(2:2=9)) で数えられます。

yatsuta55
質問者

お礼

ご回答ありがとうございます。 大変助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.3

考え方 全部一度にやろうとしない。 ひとつずつ、手で計算するときと同じ事を作業用の列やシートを作って行う。 難しいと思ったら、こんなふうにすると良いですよ。 作成した Excel のシートを販売でもしない限り、できあがってから考え直しても良いのですからね。  確認と提案1 時給アップは土日だけですか?休祭日は平日扱いなんでしょうか。 もし休祭日も時給アップなら土日休祭日かを示す行があった方がやりやすいと思います。  確認と提案2 時間外労働に対する考慮は不要ですか。 もしも時間外作業が生じるのでしたら、別途残業時間の記入方法を考えておきましょう。  確認と提案3 現在どのような計算式を立てているのでしょうか。 それを完全に無視しても良いですか。  確認と提案4 土日出勤の時給は一律アップですか。 休祭日は平日扱い。時間外労働は無い。今の計算式は無視してOK。土日は一律アップ。として考えてみます。 A列には店員の名前、B列から日付が記入されているとします。 なお、Sheet2の A1セルには年、A2セルには月 が記入されているとします。 Sheet2の空いているセルに、時給1~5・乗率に相当する数値を記入してそれぞれ範囲名を付ける。 (Sheet2の B2セルに時給の金額と勤務時間を入力(=850*8 とか)そして、左上にB2と表示されている窓に"時給1"と入力。  これを乗率まで行う。など)  シート2で値段をそのまま計算します。  Sheet2 の B3セル に   =IF(Sheet1!B3="9",時給1,)  これが基本。その日の賃金が計算されます。   =IF(WEEKDAY(DATE(A1,A2,B1)<6,1,乗率)  これが平日と土日出勤時の時給の乗率設定  2つ組み合わせると   =IF(Sheet1!B3="9",時給1*IF(WEEKDAY(DATE(A1,A2,B1)<6,1,乗率),)  になります。  コピーすることを考えて、絶対参照と相対参照を混ぜます。   =IF(Sheet1!B3="9",時給1*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),)  あとは時間毎の組み合わせを加えます。   =IF(Sheet1!B3="9",時給1*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),   IF(Sheet1!B3="12",時給2*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),   IF(Sheet1!B3="17",時給3*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),   IF(Sheet1!B3="18",時給4*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),   IF(Sheet1!B3="F" ,時給5*IF(WEEKDAY(DATE($A$1,$A$2,B$1)<6,1,乗率),   0)))))  ※ 便宜上 行を分けていますが、改行せず1行にまとめてください。  あとは横方向に合計を求め、Sheet1 で計算結果のセルを参照すれば Sheet1 はスッキリします。  これはできるよね。  計算が長く難しくなったら、Sheet3 以降で他の時間を別に行うなどして、あとで合計を求めましょう。 ちなみに動作の検証はしていません。 正しく動作しなくても責任は負えませんので、自身でよく考えて修正するなどしてください。 そんなわけで COUNT系の関数を使わずに行う方法でした。 本来は条件がもっと複雑で、こんなやり方をしないと作っている人も分からなくなるくらいです。 ですので 「たかがエクセル」 といって安請け合いしないことを心がけましょう。

yatsuta55
質問者

お礼

不十分な説明からわざわざ長い説明ありがとうございました。 if文を用いる方法は思いつきませんでしたが残り付けたい機能として 「営業時間短縮における出勤時間の短縮」「年末年始等の特別手当(時給に上乗せ分)」「年末年始等の特別手当(時給に乗率分)」がありますのでそちらで活かせたらと思います。何分機械工学が専攻の学生ですのでぶしつけな質問失礼しました。

すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 A列を氏名、日付、曜日をB1:AF2で数値、文字列としています。 (1)AG2に=SUMPRODUCT((B$2:AF$2="日")*($B3:$AF3={9;13;17;18;"F"}))を設定して下方向にコピー (2)後はAG列をSUM関数で集計で如何でしょうか。

yatsuta55
質問者

お礼

ご回答ありがとうございます。 sumproduct関数を使わせていただくことにしました。 no.1の方と同じご回答でしたのでベストアンサーは no.1の方にさせていただきますがご厚意大変感謝しております。

すると、全ての回答が全文表示されます。

関連するQ&A