もやしさん家のもやもやな生活

育児とキャンプとキャンピングトレーラーのブログ♪

(Excel)複数の列の値から条件を指定してカウントする

IT企業につきものの運用管理という仕事。
自分の作った条件によって自分が大変になる、いわゆる自爆しかけたのでここ数日ほど再構築に取り組んでいました。
f:id:moyashinet:20200210211753j:plain
ようやく落としどころが見えたのと、後々も使いそうなExcel関数だったので自分的備忘メモです。

 

 

前提条件

予約管理を想定しています。
3本のスコップ(例です)を、5人の社員で使いまわします。

基本はスコップの数>=予約数

スコップは全部で3本なので、1日あたりの予約は3人までにしないといけません。
1日あたりの予約数はCOUNTIF関数で計算できますね。
f:id:moyashinet:20201202222231j:plain
図のように数を直接出しても良いですし、条件付き書式を使って予約可・予約不可と日本語を表示しても良いかもしれません。

今回のように3本-5人なら、むしろスコップのリストを作るほうが間違いないでしょうが、モノもヒトも多くなると社員用のカレンダーを作るほうが現実的かもしれません(そもそも予約のために手を煩わされたくない)。

毎日の貸し借りは大変ですね?

上の運用を回し始めると、毎日「貸出」「返却」の手間が発生します。
そんなことはやってられないので、週の頭に、その週にスコップ使う人に渡して週の終わりに回収することにしました。
f:id:moyashinet:20201202222312j:plain
こうやって楽しようとしたのがいけなかった…。

今まで通り、1日あたりのスコップ希望者数を見ているだけだと、オーバーブッキングしてしまいます
これをどうにか3人までになっていることが分かるようにしないといけません。
いろいろ調べてみたのですが、そんな都合の良い関数が見つからなかったので、次のような式で計算することにしました。
f:id:moyashinet:20201202222402j:plain
COUNTIF(C3:C7,"○")で、第一営業日の予約者数を計数します。
第二営業日は、第二営業日に予約が無い人かつ第二営業日に予約した人の数を計数します。
複数の条件を指定するため、COUNTIFS関数を用います。
COUNTIFS関数の第1引数と第2引数で、第一営業日に予約が無い人『C3:C7,""』、
第3引数と第4引数で第二営業日に予約のある人を計数します『D3:D7,"○"』
あとは必要な日数分、COUNTIFS関数の式を増やし、それぞれを『+』で加算することで目的の数字が取得できるようにしました。

まとめ

f:id:moyashinet:20201202222426j:plain
これが1週間単位なら7つの式の足し込み、1か月単位なら30個の式の足し込みになるのでどうにも頭の悪そうな数式です。
もっと良い計算方法が無いものだろうか…というのが目下の悩みです。