質問: エクセルで複数セルの中の数(日数)を数える関数を教えて下さい 有給取得義務化が決定し、取得予定表を作成するよう指示され事前にスタッフから取得希望日(5日分)を聞いて添付図表の数字(b列からm列)を入力しました。 (日付は4桁表記、同月に2日以上希望がある場合は「,」で区切り、同一セルに入力) 取得日数が何日分入力されているか関数を用いてn列に表示させたいのですが、どのような関数を用いれば良いのかがわかりませんので教えて頂きたく質問致します。(添付の表はベタ打ちしましたが、実際には人数が多いので関数で表示できればと思います) ひと月につき1日しか入力されていなければcount関数でいけると思うのですが、複数入力されている場合があるのでわからず困っています。 宜しくお願い致します。
回答: no.1の回答者さんも指摘しているように、表その物を変えることをお勧めします。 質問者さんが作成した表では、入力する値は4桁である必要はありませんよね。 そんななら、はじめっから1人1つのセルに入れてしまえば良いということになります。 月で分ける必要なんて無い。 ・・・本題・・・ 自分なら... b列からm列までのセルを行単位で結合し、セルを結合する時カンマ(,)で区切る。(冒頭に書いた1つのセルに入力するを実現) カンマの数を数え、それに1を足す。(カンマは値を繋ぐ文字なので、この数に1を足せば値の数になる) ...という手順で求めます。 ・・・ textjoin関数を使ってセルを結合します。 =textjoin(区切り文字,空のセルを無視,文字列1,[文字列2],...) のようにして使いますので、 =textjoin(",",true,b1:m1) こんな感じになります。 カンマの数を数えるには、カンマを消した文字列の数と、カンマを消さない文字列の長さを比較すれば良いので substitute関数でカンマをヌル文字にして消してしまいます。 =substitute(文字列,検索文字列,置換文字列) のようにして使いますので、 =substitute( textjoin(",",true,b1:m1) , "," , "" ) こんな感じになります。 そして文字列の長さを数えるのはlen関数。 =len(文字列) のようにして使いますので、 =len(textjoin(",",true,b1:m1)) これでカンマで繋がれた文字列の長さ、 =len(substitute( textjoin(",",true,b1:m1) , "," , "" )) これでカンマを消して結合した文字列の長さ、 が返ってきます。 あとは引き算して1を足す。 =len(textjoin(",",true,b1:m1)) - len(substitute( textjoin(",",true,b1:m1) , "," , "" )) +1 これで一応は完成。 ただし、全く入力されていない場合でも「1」と返ってくるので、別途文字列の長さが「0」なら「0」を返す処理を入れます。 =if(textjoin(",",true,b1:m1)="" , 0 , len(textjoin(",",true,b1:m1)) - len(substitute( textjoin(",",true,b1:m1) , "," , "" )) +1) こーんな面倒くさい数式になります。 ※ 実際にexcelで動作させた数式ではありません。あくまでも考え方を示すために机上で考えた数式ですので、正しく動作する保証はありません。 ・・・ ...これ、条件が変わって質問者さん自身でメンテナンスするのほぼ不可能じゃね? (自分が入力ミスし数式が正しく動かないとして質問者さんがこれを正しく修正することを含む) そんなわけで、元の表を今からでも作り直すことを強く勧めます。 そのほうが確実に仕事をこなすことができますよ。