[[20190806133319]] 『複数条件以外のセルを数えたい』(ドロップ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数条件以外のセルを数えたい』(ドロップ)

       |A列   |B列    |C列    |
1] 出  | 4     | 4      | 5      | ←6/15〜6/19の出勤日数
2] 6/1 |       |有休    |公休    |
3] 6/2 | −    | −     | −     |
4] 6/3 |       | 東京   |代休    |
5] 6/15|       | 東京   |        |
6] 6/16|代休   | 神奈川 |        |
7] 6/17|       | 公休   |        |
8] 6/18|       | 大阪   |        |
9] 6/19|       | 大阪   |        |

− :会社休日

会社休日、有休、公休、代休以外の日数を出席日数として
カウントしたいです。
中には行先を記載する人もいるので、空白の部分と↑上記以外が
入力されている数をカウントしたいです。

1行目に下記の様に入れると本来計算したい出勤日数 以外の数は
出ると思うのですが、ここから出勤日数を出す事は可能でしょうか?
=SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"}))

1年を通してのスケジュールがあり、毎月一回タイムカード代わりに
●/15〜○/16を選択して、出勤日数を計算して印刷して出したいので、
上記の方法だとフィルタで6/15〜6/19を選んだとしても、
非表示になっている部分も計算されてしまいます。

アドバイス頂けますようお願い致します!

< 使用 Excel:Excel2010、使用 OS:Windows8 >


 >1行目に下記の様に入れると本来計算したい出勤日数 以外の数は 
 >出ると思うのですが、ここから出勤日数を出す事は可能でしょうか? 
 >=SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"})) 

 これが算出できるのであれば、全日数から引くことで求められるのでは?

 期間指定については、どこかのセルに、開始日 終了日 を入力することとして
 そこを参照する数式で、希望の数値は算出できると思います。

(渡辺ひかる) 2019/08/06(火) 14:02


 ちょっと確認ですけど
 フィルターオプションで、別の場所に抽出するのではダメなんですかね?
 そうすれば非表示とか考えなくても済むと思いますけど。

 ところで
 >=SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"})) 

 ↑ の式は =SUM(COUNTIF(A2:A9,{"-","*休"})) とは何か違いがありますか?

 ついでに出勤日数は(非表示を考えない場合)
 =COUNTA(A2:A9)-SUM(COUNTIF(A2:A9,{"-","*休"}))

 A2:A9の空白が数式の結果なら(数値はないものとして)
 =COUNTIF(A2:A9,"?*")-SUM(COUNTIF(A2:A9,{"-","*休"}))

 以上、参考まで
(笑) 2019/08/06(火) 14:37 修正 15:14

●渡辺ひかるさん

期間指定について教えて頂きまして、ありがとうございます。
こちらで期間中の日数は数えれたのですが、

=SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"}))

こちらの計算式では非表示部分の出席日数以外の数が出てしまうので、
単純に引き算では数が合ってこないようです💦
(ドロップ) 2019/08/06(火) 15:48


 >こちらの計算式では非表示部分の出席日数以外の数が出てしまうので、 
 >単純に引き算では数が合ってこないようです

 って、こちらでは、その数式の検証はしていませんから・・

 >1行目に下記の様に入れると本来計算したい出勤日数 以外の数は 
 >出ると思うのですが

 とあったので、回答したまでです。

 さて、多分 A列は日付で、データはB列以降 と判断します
 F1セルに開始日、G1セルに終了日を入力することとします。

 でB1セルに下記の数式を入力して、必要分だけ右にコピペしてください。

=SUM(COUNTIFS(OFFSET(B1,IF(INDEX($A:$A,MATCH($F$1,$A:$A,1))=$F$1,MATCH($F$1,$A:$A,1),MATCH($F$1,$A:$A,1)+1)-1,,MATCH($G$1,$A:$A,1)-IF(INDEX($A:$A,MATCH($F$1,$A:$A,1))=$F$1,MATCH($F$1,$A:$A,1),MATCH($F$1,$A:$A,1)+1)+1),{"−","*休"}))

 条件の{"−","*休"} の部分で数式と、データが異なっていたので、ちょっと苦労しました
 データに合わせてください。

(渡辺ひかる) 2019/08/06(火) 16:47


 念のため・・

 回答した数式は、

 =SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"})) 

 に代わるもので、

 >本来計算したい出勤日数以外の数

 を算出するものです。

(渡辺ひかる) 2019/08/06(火) 17:00


 なんか完全に無視されてるようですけど
 一応答えておくと、オートフィルターで表示のみをカウントする場合

 A列が日付だとすれば

 =SUMPRODUCT(SUBTOTAL(2,INDIRECT("A"&ROW($A$2:A$100)))*(B$2:B$100<>"")*(B$2:B$100<>"-")*(RIGHT(B$2:B$100)<>"休"))

 右コピー

 以上
(笑) 2019/08/06(火) 17:12

●笑さん

失礼いたしました!
更新ボタンを押したのですが、きちんと反映されていなかったようです。

 >=SUM(COUNTIFS(A2:A9,"<>",A2:A9,{"-","*休"})) 

 ↑ の式は =SUM(COUNTIF(A2:A9,{"-","*休"})) とは何か違いがありますか?

こちらは私が深く考えれずに書いていたので、
内容は教えて頂いたスッキリした計算式にしたかった感じです。ありがとうございます。

 >フィルターオプションで、別の場所に抽出するのではダメなんですかね?
 >そうすれば非表示とか考えなくても済むと思いますけど。

これは全く考えていませんでした。
別の場所に抽出するのは全く問題なかったので、この方法にしてから↓こちらの式
を使うことによって、カウント出来ました!

=SUMPRODUCT(SUBTOTAL(2,INDIRECT("A"&ROW($A$2:A$100)))*(B$2:B$100<>"")*(B$2:B$100<>"-")*(RIGHT(B$2:B$100)<>"休"))

(ドロップ) 2019/08/06(火) 17:51


 すみません、訂正です。

 >=SUMPRODUCT(SUBTOTAL(2,INDIRECT("A"&ROW($A$2:A$100)))*(B$2:B$100<>"")*(B$2:B$100<>"-")*(RIGHT(B$2:B$100)<>"休"))

 =SUMPRODUCT(SUBTOTAL(2,INDIRECT("A"&ROW($A$2:$A$100)))*(B$2:B$100<>"")*(B$2:B$100<>"-")*(RIGHT(B$2:B$100)<>"休"))
                                              ~~~~~~~
                                              ↑ 絶対参照に

 ところでこの式は、元と同じ列でフィルターをかけた場合に、非表示を無視してカウントする式ですよ。

 別の場所に抽出したのなら、非表示とか考えなくてもいいので
 ↓ な感じでできませんか?
 =COUNTA(B2:B50)-SUM(COUNTIF(B2:B50,{"-","*休"}))

 以上、訂正&確認まで
(笑) 2019/08/06(火) 18:16

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.