• 締切済み

エクセルで有給日数計算

社歴に応じ、添付している表の基準で毎年の有給日数が確定します。 E11以降にそれぞれ数式で何日取得可能か表示したいのですが 数式で可能であれば教えて下さい。 エクセル2013使用です。 お願い致します。

みんなの回答

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.8

お邪魔します 此って期間に半年足せば 何年か だけに、なります… よね? 又は そのまま、区切りを利用して 後は n年以上かの、処理をすれば 良いだけ と、いう風に とても単純 ですよね? と、いう事で A1:B8の表の 何行目か、は こうしてみました SUMPRODUCT(FREQUENCY(YEAR(DATE(YEAR(D11),MONTH(D11)+6,DAY(D11)))-1900,{1,2,3,4,5,6,7})*(ROW(A$1:A$8)-1)) (改良版:SUMPRODUCT(FREQUENCY(D11,$C$2:$C$8)*(ROW(A$1:A$8)-1))) (※注:C列にはA列の、日付形式入力版が、隠してあります) でも 今、思えば MATCH文で,十分ですね (※注:エラー処理が必要だけど) IFERROR(MATCH(YEAR(DATE(YEAR(D11),MONTH(D11)+6,DAY(D11)))-1900,INDEX(ROW(A$1:A$7),,),1),0) (改良版:IFERROR(MATCH(D11,$C$2:$C$8,1),0)) 因みに C列では、値を 日付形式で入力しています D列では、何日経過しているか を =DATE(YEAR(TODAY()-B11),MONTH(TODAY()-B11),DAY(TODAY()-B11)) で、計算しています 出来上がった状態のものを エクセルファイルで 参考URLに、残しておきます ので 良ければ、早めに ダウンロード、くださいね

参考URL:
https://1drv.ms/x/s!AjviygfJDgV_kSCbX84x_3itL0S-
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.7

 今仮に、「6ヶ月」~「6年6ヶ月以上」などの社歴別や、「A」、「B」、「C」等の氏名が入力されている列がA列であるものとします。  その場合、まずC11セルに次の関数を入力して下さい。 =IF(OR($B11="",ISERROR(1/NOT($B11-TODAY()>0))),"",TRIM(SUBSTITUTE(" "&DATEDIF($B11,TODAY(),"Y")&"年"&DATEDIF($B11,TODAY(),"YM")&"ヶ月"," 0年",)))  次に、D11セルに次の関数を入力して下さい。 =IF($C11="","",IFERROR(IF(DATEDIF($B11,TODAY(),"M")<DATEDIF("昭和62年12月1日","平成"&SUBSTITUTE(SUBSTITUTE(VLOOKUP("*以上",$A:$A,1,FALSE),"ヶ",),"以上","1日"),"M"),VLOOKUP($C11,INDEX($A:$A,MATCH(IF(DATEDIF($B11,TODAY(),"Y")<1,"*ヶ月","*年*"),$A:$A,0)):INDEX($B:$B,MATCH(IF(DATEDIF($B11,TODAY(),"Y")<1,"*年*","*以上"),$A:$A,0)-1),COLUMNS($A:$B)),VLOOKUP("*以上",$A:$B,COLUMNS($A:$B),FALSE)),"(無し)"))  次に、C11~D11のセル範囲をコピーして、C列~D列の12行目以下に貼り付けて下さい。  以上です。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.6

#5です。 漢字交じり的月数を数字の月数にする変わったやり方を参考までに。 http://officetanaka.net/excel/function/tips/tips57.htm などに解説有り。 例データ A-D列 A列が元データ、B、C列は、理解のための、途中の結果、D列が求める結果 1年6ケ月 1年6  1*12+6 18 3年7ケ月 3年7  3*12+7 43 B2の式 =SUBSTITUTE(A2,"ケ月","") ケ月を抹消 C2の式 =SUBSTITUTE(B2,"年","*12+") 年を*12+に置き換え 下記のD2の「計算」は名前定義であって、数式ー名前の管理ー「参照範囲」に =EVALUATE(Sheet1!C2) D2の式 =計算

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.5

既出回答に正答があるだろう。 質問者が、こんな質問をしているので、考え方を述べてみるので、参考にするなら、してみて。よくあるパターンの、よく出てくる関数を使う質問だ。 ーー エクセル使いなら、VLOOKUP関数を使うことをすぐ思いつく。 ただし、普通よく使われるのは第4引数がFALSE(同じ値を表から見つけ出す、引く)だが、本件で使えるのは、TRUE型で、表の範囲を引くという違いがある。表の範囲の該当行を引くのであるから、基準表のエントリ(社歴月数)は昇順に並べておく(小ー>大) ーー ここで都合の悪いのは基準表の月数が日本語的表示(年、ケ月の漢字が入っている)していること。 これを単純月数字の表に、作り直すほうが良い。手作業の方が早い。6と18を上下セルに入れて+ハンドルを≫出して下へ引っ張る。月が欲しければ書式で「月」を設定。 ーー 一方社員データ表の方は、入社日ー基準日を引数に指定して DATEDIF関数の第三引数に「M」をを使えば、(社歴の)月数が出る。 DATEDIF関数について http://kokoro.kir.jp/excel/datedif.html 例データ 基準表 月ー休暇日数 F列  G列 0 10 6 11 18 12 30 14 42 16 54 17 以下や未満などで表の数字を1調整必要な場合在り。 社員データ C列 D列 12 11 23 12 14 11 35 14 5 10 3 10 6 11 11 11 60 17 100 17 D1の式は =VLOOKUP(C1,$F$1:$G$6,2,TRUE) 下方向に式を複写する。 考え方を中心に、急いで書いているので、手違いがあれば後免。 ーー 基準表の見方では、 ある値-------XX 直ぐ次(行)の値ーーYY となっていると、「ある値から直ぐ次の値の間」はXXを取る、と理解する。

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.4

[No.3]の訂正、 何を血迷ったか、完全に間違えてました。 済みませんでした。 D11: =IFERROR(INDEX(B$2:B$8,MATCH(C11,C$2:C$8)),0) に訂正します   A   B   C  D 10 名 入社日  社歴 有休 11 A H18.09.25 10.2  20 12 B H19.10.01 9.2  20 13 C H19.11.21 9.0  20 14 A H23.09.06 5.3  16 15 B H24.02.01 5.0  16 16 C H25.05.21 3.6  14 17 A H26.02.03 3.0  12 18 B H26.07.31 2.4  11 19 C H26.11.25 2.0  11 20 A H27.06.21 1.5  10 21 B H28.06.21 0.5  0

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.3

添付図参照 解説抜きでも分かるでしょ? C2: =INT(A2/12)+MOD(A2,12)/10 C11: =DATEDIF(B11,TODAY(),"y")+DATEDIF(B11,TODAY(),"ym")/10 D11: =IFERROR(VLOOKUP(C11,A$2:B$8,2),0) 【余談】「有給」は「有休」で良かんべ~

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

=IF(DATEDIF(入社日,NOW(),"m")<6,0,IF(DATEDIF(入社日,NOW(),"m")<30,INT((DATEDIF(入社日,NOW(),"m")-6)/12)+10,IF(DATEDIF(入社日,NOW(),"m")<78,INT((DATEDIF(入社日,NOW(),"m")-18)/12)*2+10,20)))

すると、全ての回答が全文表示されます。
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは A列の社歴別と、C列の社歴は文字列で入力されているのですか? 6ケ月とか、10年2ケ月のように。

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

関連するQ&A