5

その日数を数えたい

  1. 現在から年末まで (つまり、12 月 31 日) に発生し、
  2. その月の 15 日または末日 (4 月、6 月、9 月、11 月は 30 日、1 月、3 月、5 月、7 月、8 月、10 月、12 月は 31 日、2 月は 28 日) になります。

これを達成する方法はありますか?

4

3 に答える 3

6

これはうまくいくようです(ただし、整理される可能性が高いと思いますが、もっと良い方法があると確信しています...)

=(12-MONTH(TODAY()))*2 
+ IF(DAY(TODAY())<15,2,
        IF(DAY(TODAY())<DAY(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)-1),1,0))

(12-MONTH(TODAY()))*2 : 残りの月ごとに 2 日

15日までならプラス2日

また

15 日以降で当月の最終日でない場合はプラス 1 日

于 2012-08-08T00:43:29.973 に答える
0

これは、2078 年まで (Excel 2007 以降ではさらに長くなります)、どのバージョンの Excel でもいつでも機能するはずです。

=SUM(IF(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0))

1日のオフセットでday = 1または16をチェックしていることに注意してください(アイデアは、さまざまな月末DAY()値を回避することでした)。

{配列数式...Ctrl+Shift+Enterコミットするには押してください}

【追記】

現在の日を含めたくない場合 (たとえば、今日が 8 月 15 日) は、代わりに次のように使用します。

=SUM(IF(DAY(ROW(OFFSET($A$1,TODAY()+1,0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0))

Ps 今日からうるう日 2016 以降までのすべての日付でテストしましたが、うまくいきました。これが行うのは、関数によって日付シリアルとして扱われる行番号をテストしてDAY()、それらが 1 か 16 かどうかを確認することだけですが、シリアルは +1 オフセットされているため、実際にDAY()は [月の最後の日] か 15 かどうかを確認しています。結果が true の場合は 1 を追加し、そうでない場合は 0 を追加します。


【追加追記】

それ以外の場合は同じように機能する非配列バージョンを次に示します。

現在の日が含まれます。

=SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16}))

当日を除く

=SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16}))
于 2012-08-08T01:06:08.697 に答える