- 締切済み
エクセルで実際の給与支給日(の前日)を表示したい
給料日は毎月決まった日なのですが、その日が土曜日の場合は前日(金曜日)に、 日曜日なら月曜日に支給されます。 家計簿をつける際に、シート内に「○月×日~△月□日」と表示しているのですが、 後半の日付は「×+30」とか入れて、違っていたら数字を変えています。そして翌月の シートは「□+1」としています。 後半の日付を支給日の前日にするにはどのような数式を使えばいいでしょうか。 エクセルは2003です。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
No2です。 > 補足しますm(__)m。給料日は16日です。 ならば簡単 A1に前月の給料日が入力されていれば =IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,16))=1,DATE(YEAR(A1),MONTH(A1)+1,16+1),IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,16))=7,DATE(YEAR(A1),MONTH(A1)+1,16-1),DATE(YEAR(A1),MONTH(A1)+1,16))) これが次月の給料日です。 その前日は上記から一日ひくだけですから =IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,16))=1,DATE(YEAR(A1),MONTH(A1)+1,16+1),IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,16))=7,DATE(YEAR(A1),MONTH(A1)+1,16-1),DATE(YEAR(A1),MONTH(A1)+1,16)))-1 です。
- _Kyle
- ベストアンサー率78% (109/139)
#3です。すみません、勘違いしていました。 本来の給料日(基準日)が毎月16日、 A1セルに前月給料日(実支給日)があるとして、 今月給料日(実支給日)の前日は、 =DATE(YEAR(A1),MONTH(A1)+1,16)+CHOOSE(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,16)),1,0,0,0,0,0,-1)-1 です。 EDATE云々は忘れてください。 前月実支給日が5月15日(金)だったとして、 元々毎月15日が給料日(基準日)なのか、本来16日なのが土曜で前倒しされたのか 前月実支給日だけでは判断できませんから、単純に翌月同日を考えたのはマチガイでした。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 質問内容の解釈が間違っていたらごめんなさい・・・ >後半の日付は「×+30」とか入れて、違っていたら数字を変えています。そして翌月のシートは「□+1」としています。 という部分がよく判らないので 単純に支給日だけを表示するようにしてみました。 ↓の画像でB2セルは =IF(WEEKDAY(A2)=7,A2-1,WORKDAY(A2-1,1,D2:D18)) という数式にしています。 一応祝祭日の事を考えていますので、日・月と連休になる場合は 連休明けが支給日になると思います。(今年のデータです) そしてB4セル(←ここが自信ありません) =EDATE(B2,1)-1 B5セルは単純に =B4+1 だけです。 尚、EDATE関数やWORKDAY関数を使っていますので ツール → アドイン → 「分析ツール」にチェックを入れる必要があります。 以上、参考になれば幸いですが、 的外れの回答なら無視してくださいね。m(__)m
- _Kyle
- ベストアンサー率78% (109/139)
1.A1セルの翌月同日の日付を求める 2.1の日付が日曜であれば+1、土曜であれば-1する。 =DATE(YEAR(A1),MONTH(A1)+1,DAY(A1))+CHOOSE(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,DAY(A1))),1,0,0,0,0,0,-1) EDATE関数が使用可能な状態であれば =EDATE(A1,1)+CHOOSE(WEEKDAY(EDATE(A1,1)),1,0,0,0,0,0,-1) あるいは、ちょっとヒネり過ぎですが =EDATE(A1,1)-INT((WEEKDAY(EDATE(A1,1))-2)/5) ご参考まで。
- merlionXX
- ベストアンサー率48% (1930/4007)
> 給料日は毎月決まった日なのですが、 その決まった日をちゃんと書いてくれるとたすかるのですが・・・ A1セルに当月の給料日がある場合、 もし、1~28日のいずれかなら =IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)))=1,DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)+1),IF(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)))=7,DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)-1),DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)))) で翌月の給料日がでます。 29日~月末日のいずれかなら月によっては翌月にずれこむ場合がありますがそれでいいのかどうか補足してください。 たとえば、給料日が30日の場合、2月はいつ払われるのか等?
日付がA1にあるとして、週休2日だと、 =WORKDAY(A1,20) WORKDAY関数は、土日を除く稼働日のみを計算します。
補足
補足しますm(__)m。給料日は16日です。