*

【Excel】対象日が今週日付なら0、先週なら-1、来週なら+1を返す式

公開日: : 最終更新日:2013/09/20 Excel ,

対象日が今週の日付なら0、先週の日付なら-1、来週の日付なら+1、となるような式を考えてみた。

Excel2007以降でオートフィルタ使えば、日付でうまい具合にソートできるが、2003ではそうもいかないので考えてみた。

使用する関数:

  • TODAY()
  • WEEKDAY()
  • ROUNDDOWN()
  • ROUNDUP()
  • IF()

Excelでは、日付を連続したシリアル値として処理している。

1990年1月1日がシリアル値1として保存されていて、2008年1月1日は39,448日後だからシリアル値は39,448。

なので、基準となる日曜日の日付と対象の日付の差を出し、それを7で割った際の商の部分が週の数になる。

式で表すと、

(対象日付 - 基準日) ÷ 7

この式のままだと、小数点も表示されてしまうので、ROUDDOWN関数とROUNDUP関数を使う。正の値の場合はROUNDDOWN関数で切り下げ、負の値の場合はROUNDUP関数で切り上げる。負の値で切り上げるのは、「-0」という値を無くす為。

基準日の算出だが、Excelには「今週の日曜日の日付」をそのまま表す関数は無い。そこで、WEEKDAY関数を使う。

WEEKDAY関数は、WEEKDAY(シリアル値、種類)で表現される。

日付を表すシリアル値から、その日付に対応する曜日を返す。規定(種類=1の場合)では、1(日曜)から7(土曜)までの範囲の整数となっている。よって、TODAY関数を使って本日日付をWEEKDAY関数のシリアル値に入れれば曜日を表す整数が帰ってくるので、その値を本日日付から引いた日付に1日足せば今週の日曜日の日付が導出出来る。

式で表すと、

基準日(今週の日曜日) = 本日日付 - WEEKDAY(本日日付,1) + 1

上記の式を組み合わせると、

IF(%対象セル%-(TODAY()-WEEKDAY(TODAY(),1)+1)<0,ROUNDUP((%対象セル%-(TODAY()-WEEKDAY(TODAY(),1)+1))/7,0),ROUNDDOWN((%対象セル%-(TODAY()-WEEKDAY(TODAY(),1)+1))/7,0))

で欲しい結果が帰ってくる。

関連記事

Microsoft-Excel-2007-Logo

【Excel】VBAの雑多なTips

ExcelのVBAでマクロを作る際に、メモしておこうと思ったTipsを以下に列挙。 ・列番号を英文

記事を読む

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

small-icon.hover
【機械学習】Stanford University Machine Learning / Week4【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week3【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week2【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week1【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

ダウンロード
【WebSocket】Safariからlocalhostに対してハンドシェイクする際の注意点

この記事の対象者 とりあえずlocalhostで色々と試したい

→もっと見る

PAGE TOP ↑