• ベストアンサー

Excel 元旦の曜日

Excel で、任意の年の元旦の曜日を表示させる数式は下記のとおりだという記事がありました。 (年 + ( 年 - 1 ) / 4 - ( 年 - 1 ) / 100 + ( 年 - 1 ) / 400 ) % 7 「年」のところはどう記入すればよいのか教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

◆ご提示の式は少し、分かりかねますが ◆こんな方法はいかがでしょうか?     A     B 1   2007   月 ★A1に「年」を入力して B1=DATE(A1,1,1) ★表示形式をユーザー定義で、 aaa とします

awazo
質問者

お礼

maron--5さん ありがとうございました。 簡潔が最上、バッチリです。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 私の#5の回答は、不勉強なもので、間違えていました。 #6 のimogasiさんのご回答で気が付きました。 =MOD(年-1+INT((年-1)/4)-INT((年-1)/100)+INT((年-1)/400)+INT(177/5)+1,7)+1 でした。 それと、 [XL2002] WEEKDAY 関数で 1900 年 3 月 1 日より前の正しい曜日が返らない http://support.microsoft.com/default.aspx?scid=kb;ja;JP106339 ということです。 ツェラーの公式をVBAに直してみました。たぶん良いと思います。 1900年のDate 関数は別として、上記の数式との矛盾は発生していません。 '標準モジュール Function Zeller(ByVal Y As Integer, ByVal M As Integer, D As Integer) As Integer  If M = 1 Or M = 2 Then   Y = Y - 1   M = M + 12  End If   Zeller = (Y + Y \ 4 - Y \ 100 + Y \ 400 + (13 * M + 8) \ 5 + D) Mod 7 End Function ※数式は、 =Zeller(年,1 ,1 ) +1 としています。「年」の説明は、#5 の通りです。 ところで、ユリウス暦は、一旦、ユリウス暦の日付に変換する必要があるわけですね。ユリウス暦は、紀元前4713年1月1日 からということになりますが、それは、またいずれそういう質問もあるかもしれませんね。ヨーロッパでは、こういう計算は、歴史的に、古いようですね。

awazo
質問者

お礼

Wendy02さん ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

エクセルの質問になってますが、エクセルとは関係がありません。 何でもエクセルの質問のタイプです。 エクセルは計算道具にしか過ぎません。 (1)エクセルは1900/1/1から9999/12/31目での日付を扱えます。エクセルは歴史的に主にビジネス計算向けなので、これでなんら不都合は無いはず。 10000/1/1はこの表示にはなるが、日付シリアル値に」なりませんので 日付の関数、数式、書式が使えません。 曜日は書式をaaaにするか、=TEXT(A1,"aaa")で出ます。 -- 質問の公式は ツェラーの公式 で (1)http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F (2)http://cl.is.kyushu-u.ac.jp/Literacy/PP/H14/adp/program/date.html (3)http://www.geocities.jp/wepon_bafu/friday13.html 他多数出てきます。 ゆっくり考えたこと無いが、年-1は公式に出てきてない。 またガウス記号が公式には出てきていると思うが、質問の式には出ない。書き写し違いが無いですか。[ ]を()と見てしまっているとか。 年ー1は、1,2は前年の13,14月とするとあるので、そのことと関連するのかな。だとすると質問の公式は全的なものでない。 ーー (3)が理屈も説明している。 エクセルにはガウス記号(”[ ]”はガウス記号といい、ある値について、それを超えない最大の整数値を表す際に用いられる。)は直接は使えない。正の場合はINT()関数で置き換える。 ーー ModはMOD関数があり、書き方は=MOD(数、割る数・除数)で、あまりが出ます。 -- 公式をエクセルに載せ(計算す)るにはどうするかなら、もう一度公式を良く考え、改めて質問したらどうですか。

awazo
質問者

お礼

imogasiさん ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 私もツェラーの公式に当てはめてみました。 曜日=MOD(年+年/4-年/100+年/400+(13*月+8)/5+日),7) Excel関数で、1月1日は その前の年の13月という計算をしますから、 =MOD(INT((年-1)+(年-1)/4-(年-1)/100+(年-1)/100+21/5+4),7) +4 は、Excelの書式のための補正値です。(この方法が、正しいのかどうか分かりません)書式の曜日と合わせましたので、書式のユーザー定義の「aaa」や「ddd」 などに設定してください。 もちろん、[年]は、名前-定義で設定します。 適当なセルを指定して登録しておきます。 ただし、これは、1900年~2100年の200年間までしか確かめていません。過去に対しては、Excelはサポートされていません。この公式は、たぶん、グレゴレオ暦からだと思いますから、1582年10月15日以降、つまり、1583年からだと思います。

awazo
質問者

お礼

Wendy02さん ありがとうございました。

回答No.4

どうしても この形式でないといけないのでしょうか? WEEKDAY 関数を使えば 簡単に表示できますけれども。 たとえば A2のセルに下の式をかき、 =WEEKDAY(A1,1) A1のセルに 2007/1/1 と書けば A2のセルに 2 と答えが表示されます。 2は月曜日のことです。 これを踏まえて A9のセルに =WEEKDAY(CONCATENATE(A10,"/1/1"),1) と言う式を書いておいて A10に任意の年(西暦)を入れれば A9のセルに 数値が入ります。 1でしたら 日曜日、2でしたら 月曜日… ということになります。 なお CONCATENATEと言う関数は 複数の文字列を結合する関数だそうです。私も初めて知りました。 #1さんの方がわかりやすいですね。

awazo
質問者

お礼

tommy-pie83さん ありがとうございました。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.3

西暦 1900年 1月 1日は、日曜日です。 そこからどれだけ、ずれたかを計算しようとしています。 Windows 系の Excel では、1900年 1月 1日を シリアル値 1と決めているので、上式の年には、西暦を入れてください。 しかし、Mac系の Windows では、1904年 1月 1日を シリアル値 0と決めているので、上式の年には、西暦+5 を入れる必要があります。

awazo
質問者

お礼

DIooggooIDさん ありがとうございました。

  • redowl
  • ベストアンサー率43% (2140/4926)
回答No.2

ツェラーの公式で求めることを http://suika.fam.cx/~wakaba/-temp/wiki/wiki?%A5%C4%A5%A7%A5%E9%A1%BC%A4%CE%B8%F8%BC%B0 問いておられるのかと・・・ エクセルで算出させるなら 1月1日の曜日限定で A1に 西暦  (4桁) B1に  =MOD(SUM(A1,INT((A1-1)/4),-INT((A1-1)/100),INT((A1-1)/400)),7) 日曜なら0、月は1、・・・・

awazo
質問者

お礼

redowlさん ありがとうございました。

関連するQ&A

専門家に質問してみよう