某サイトに以下の質問
--------------------------------------------
~課題EX3~
1.A4に西暦を入力すると、その年の1年間の日数がB4に表示されるようにしなさい。
※0以下の数字は入力しないものとする。例えばA4に2008と入力すればB4に366と表示されるようにする。
ヒント:IFを複数使う。うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、400で割り切れる年はうるう年である。割り切れるかどうかを判定→MOD関数(余りを求める関数)を使う。
例:MOD(13,5)=3(13÷5=2余り3)、MOD(4,3)=1(7÷3=2余り1)となる。
2.A4に西暦を入力すると、西暦1年から数えて何回うるう年があったかをC4に表示されるようにしなさい。
ヒント:切捨てを行う、ROUNDOWNを使って計算するとよい。
ROUNDOWNは切り捨てを行う関数。例:ROUNDDOWN(123.45,0)=123となる。
----------------------------------------------------------------------
Aさん
そもそも
>うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、400で割り切れる年はうるう年である。
というグレゴリオ暦が制定されたのは1582年でそれ以前は別の方法によっているし国によってもばらばらなんですが…
ごもっとも
-----------------------------------------------------------------------
Bさん
1.=DATE(A4+1,1,1)-DATE(A4,1,1)
2.=INT(A4/4)-INT(A4/100)+INT(A4/400)
アレンジしてください。
課題に沿った答えからはわざと外しているので。
まぁ、Excelの問題というよりは、考え方の問題ですよね。
Cさん
=AND(MOD(A1,4)=0,OR(MOD(A1,100)<>0,MOD(A1,400)=0))
=SUM((MOD(ROW(A1:A2008),4)=0)*((MOD(ROW(A1:A2008),100)<>0)+(MOD(ROW(A1:A2008),400)=0)))
ctrl+shift+enterで確定
Dさん
学校の課題を自分でやらずに
回答者にやらせるのはやめましょう。
暦の決まりは度外視して
1
=365+((MOD(A4,4)=0)*(MOD(A4,100)<>0))+(MOD(A4,400)=0)
2
=TRUNC(A4/4)+TRUNC(A4/400)-TRUNC(A4/100)
Bさんと同じく
あえてヒントからはずれた回答をしています。
------------------------------------------------------------------
Eさん
お晩です。
スレ主さん
学校の宿題は既に学習している問題です。
「ひょーどる」さんが分かり易く明確に指摘しています。
貴方の質門が不明確です。
一見、IF関数とかMOD関数を使用する内容なのでExcelを使用して求めるものと誤解しやすい内容です。
Excelでの日付関数を求める範囲は「1900/1/1」をシリアル値「1」として計算しておりますので、それ以前の西暦1年の計算は出来ません。
西暦年での閏年を求めることについては、Aさんが明確にご指摘しているとおりです。
西暦年のみ取り出し計算するのは、Aさんがご指摘している内容に反します。
当初、私はグレゴリオ暦をユリウス日に変換計算 (ユリウス日 <-4712年1月1日(BC4713年)から起算> への変換計算はちと面倒 ? ) で求められると思いましたが、ちと無理です。
Excelでは1900/1/1以前の日付は文字列として扱われるため。
もし、貴方の質門内容に誤りがないと仮定した場合、宿題を出した先生は何を考えての宿題なのか不明ですので、再度先生に質問しては。
Excelでは、1901以降は下記の式で求められます。(グレゴリオ暦をユリウス日に変換した日付けの場合は、OK ?? 例 : グレゴリオ暦「2008/1/1」は、ユリウス日「2454466.5日」)
=IF(OR(AND(MOD(A4,4)=0,MOD(A4,100)<>0),MOD(A4,400)=0),"366日","365日")
ごもっとも
-----------------------------------------------------------------------
Bさん
あくまでも関数(MOD、ROUNDDWON)の使い方の練習でしょ。
それにクイズ ヘキサゴンの計算問題と同じく計算の過程が加味されるだけ。
Eさん
>あくまでも関数(MOD、ROUNDDWON)の使い方の練習でしょ。
関数の使い方なら論理関数の使い方
-----------------------------------------------------------------------
私
Excelも暦もわからない人が教鞭をとっているのですね。
なんかがっかりしてしまいます。
間違った知識&使い方で覚えてしまうというのは痛手だな~
以前にもありましたね、おかしな宿題のスレッドが。
これについて噛み付くアホがいた!
-----------------------------------------------------------------
□投稿者/ 知ったかぶり、御託を並べる -(2008/07/12(13:08))
□U R L/
10M四方の土地の面積は?
上の方は
地球は球体なので表面積を考えると100平方メートルではない
と言うような御託を並べているだけなのでは?
簡単に
>うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、
>400で割り切れる年はうるう年である
と言う条件で、式をたてる勉強をしているだけなのでは?
論理演算ではなく、IF関数を使用してと言うことなのでは
--------------------------------------------------------------------
私のことを「知ったか」扱い(;´Д`A ```
しかも例えがアホそのもの
切れかかる感情を抑え、冷静に以下のレス
--------------------------------------------------------------------
御託というか…
こういった宿題を出すと西暦4年がうるう年だと学生が勘違いする
可能性があるということをいいたいだけです。
前提の話として、AさんやEさんがレスされていることが
説明されていて、Excelのシリアル値についての講義がなされた上で
出された宿題なら何もいわないです。
ヒントを見てもExcelに精通した人が出した宿題でないことはわかるでしょ。
あとExcelでは1900/2/29が存在しますので(1904年から計算する、を省く)
この日を含むうるう年関係の計算をシリアル値で行った場合、
1日ずれる場合があることも補足しておきます。
私なりの回答も載せておきます。
(グレゴリオ暦を西暦1年まで当てはめたとして)
この場合、Excelにシリアル値で計算させるには2000年足して
計算させればいいわけで、A4に西暦年を入力
A4の西暦年の1月1日までのうるう日の回数は
=(DATE(A4+2000,1,1)-"2001/1/1")-(A4-1)*365
となります。
A4がうるう年のとき数える場合、これに1加えるわけで
=(DATE(A4+2000,1,1)-"2001/1/1")-(A4-1)*365+(DAY(DATE(A4,3,0))=29)
となります。
日付の計算はシリアル値が基本ですので、Excelが直接シリアル値で
取り扱わない日付の対応には柔軟な発想を必要とします。
---------------------------------------------------------------------
そりゃあさ~最近掲示板からは遠ざかっていたけど昔からいる人なら
「知ったか」は無いと思うよ、新参者さん、(='m') ウププ
私に噛み付こうなんざ4年は早いよ!
--------------------------------------------
~課題EX3~
1.A4に西暦を入力すると、その年の1年間の日数がB4に表示されるようにしなさい。
※0以下の数字は入力しないものとする。例えばA4に2008と入力すればB4に366と表示されるようにする。
ヒント:IFを複数使う。うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、400で割り切れる年はうるう年である。割り切れるかどうかを判定→MOD関数(余りを求める関数)を使う。
例:MOD(13,5)=3(13÷5=2余り3)、MOD(4,3)=1(7÷3=2余り1)となる。
2.A4に西暦を入力すると、西暦1年から数えて何回うるう年があったかをC4に表示されるようにしなさい。
ヒント:切捨てを行う、ROUNDOWNを使って計算するとよい。
ROUNDOWNは切り捨てを行う関数。例:ROUNDDOWN(123.45,0)=123となる。
----------------------------------------------------------------------
Aさん
そもそも
>うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、400で割り切れる年はうるう年である。
というグレゴリオ暦が制定されたのは1582年でそれ以前は別の方法によっているし国によってもばらばらなんですが…
ごもっとも
-----------------------------------------------------------------------
Bさん
1.=DATE(A4+1,1,1)-DATE(A4,1,1)
2.=INT(A4/4)-INT(A4/100)+INT(A4/400)
アレンジしてください。
課題に沿った答えからはわざと外しているので。
まぁ、Excelの問題というよりは、考え方の問題ですよね。
Cさん
=AND(MOD(A1,4)=0,OR(MOD(A1,100)<>0,MOD(A1,400)=0))
=SUM((MOD(ROW(A1:A2008),4)=0)*((MOD(ROW(A1:A2008),100)<>0)+(MOD(ROW(A1:A2008),400)=0)))
ctrl+shift+enterで確定
Dさん
学校の課題を自分でやらずに
回答者にやらせるのはやめましょう。
暦の決まりは度外視して
1
=365+((MOD(A4,4)=0)*(MOD(A4,100)<>0))+(MOD(A4,400)=0)
2
=TRUNC(A4/4)+TRUNC(A4/400)-TRUNC(A4/100)
Bさんと同じく
あえてヒントからはずれた回答をしています。
------------------------------------------------------------------
Eさん
お晩です。
スレ主さん
学校の宿題は既に学習している問題です。
「ひょーどる」さんが分かり易く明確に指摘しています。
貴方の質門が不明確です。
一見、IF関数とかMOD関数を使用する内容なのでExcelを使用して求めるものと誤解しやすい内容です。
Excelでの日付関数を求める範囲は「1900/1/1」をシリアル値「1」として計算しておりますので、それ以前の西暦1年の計算は出来ません。
西暦年での閏年を求めることについては、Aさんが明確にご指摘しているとおりです。
西暦年のみ取り出し計算するのは、Aさんがご指摘している内容に反します。
当初、私はグレゴリオ暦をユリウス日に変換計算 (ユリウス日 <-4712年1月1日(BC4713年)から起算> への変換計算はちと面倒 ? ) で求められると思いましたが、ちと無理です。
Excelでは1900/1/1以前の日付は文字列として扱われるため。
もし、貴方の質門内容に誤りがないと仮定した場合、宿題を出した先生は何を考えての宿題なのか不明ですので、再度先生に質問しては。
Excelでは、1901以降は下記の式で求められます。(グレゴリオ暦をユリウス日に変換した日付けの場合は、OK ?? 例 : グレゴリオ暦「2008/1/1」は、ユリウス日「2454466.5日」)
=IF(OR(AND(MOD(A4,4)=0,MOD(A4,100)<>0),MOD(A4,400)=0),"366日","365日")
ごもっとも
-----------------------------------------------------------------------
Bさん
あくまでも関数(MOD、ROUNDDWON)の使い方の練習でしょ。
それにクイズ ヘキサゴンの計算問題と同じく計算の過程が加味されるだけ。
Eさん
>あくまでも関数(MOD、ROUNDDWON)の使い方の練習でしょ。
関数の使い方なら論理関数の使い方
-----------------------------------------------------------------------
私
Excelも暦もわからない人が教鞭をとっているのですね。
なんかがっかりしてしまいます。
間違った知識&使い方で覚えてしまうというのは痛手だな~
以前にもありましたね、おかしな宿題のスレッドが。
これについて噛み付くアホがいた!
-----------------------------------------------------------------
□投稿者/ 知ったかぶり、御託を並べる -(2008/07/12(13:08))
□U R L/
10M四方の土地の面積は?
上の方は
地球は球体なので表面積を考えると100平方メートルではない
と言うような御託を並べているだけなのでは?
簡単に
>うるう年は4年に1度だが、100で割り切れる年はうるう年ではなく、
>400で割り切れる年はうるう年である
と言う条件で、式をたてる勉強をしているだけなのでは?
論理演算ではなく、IF関数を使用してと言うことなのでは
--------------------------------------------------------------------
私のことを「知ったか」扱い(;´Д`A ```
しかも例えがアホそのもの
切れかかる感情を抑え、冷静に以下のレス
--------------------------------------------------------------------
御託というか…
こういった宿題を出すと西暦4年がうるう年だと学生が勘違いする
可能性があるということをいいたいだけです。
前提の話として、AさんやEさんがレスされていることが
説明されていて、Excelのシリアル値についての講義がなされた上で
出された宿題なら何もいわないです。
ヒントを見てもExcelに精通した人が出した宿題でないことはわかるでしょ。
あとExcelでは1900/2/29が存在しますので(1904年から計算する、を省く)
この日を含むうるう年関係の計算をシリアル値で行った場合、
1日ずれる場合があることも補足しておきます。
私なりの回答も載せておきます。
(グレゴリオ暦を西暦1年まで当てはめたとして)
この場合、Excelにシリアル値で計算させるには2000年足して
計算させればいいわけで、A4に西暦年を入力
A4の西暦年の1月1日までのうるう日の回数は
=(DATE(A4+2000,1,1)-"2001/1/1")-(A4-1)*365
となります。
A4がうるう年のとき数える場合、これに1加えるわけで
=(DATE(A4+2000,1,1)-"2001/1/1")-(A4-1)*365+(DAY(DATE(A4,3,0))=29)
となります。
日付の計算はシリアル値が基本ですので、Excelが直接シリアル値で
取り扱わない日付の対応には柔軟な発想を必要とします。
---------------------------------------------------------------------
そりゃあさ~最近掲示板からは遠ざかっていたけど昔からいる人なら
「知ったか」は無いと思うよ、新参者さん、(='m') ウププ
私に噛み付こうなんざ4年は早いよ!