どこよりも遅い!情報関連基礎第4問 解説
最終更新日2010年4月6日
第4問は表計算ソフトウェアを用いて、年(西暦)と月からその月のカレンダーを表示するワークシート月カレンダーを作成する問題。この月カレンダーは A1 番地に西暦を、C1 番地に月を入力すると、セル範囲 A3 〜 G8 に該当する日を表示させるようにする。
まず西暦、月、日からその月の第何週の何曜日かを計算するワークシート曜日計算表を作成する。この表の A2 番地に月カレンダーの西暦 (月カレンダー!A1), B2 番地に月カレンダーの月 (月カレンダー!C1) を入力する。B3〜H3 には曜日を表す 1〜7, A4〜A9 には第何週かを表す 1〜6 を入力した。
曜日を出力する関数として WHATDAY 関数を使う。
となるため、B4 番地には
IF( WHATDAY($A2, $B2, 1) = B3, 1, 0)
を入力する([ア]には解答群の4.が入る) 同様にして C4 〜 H4 に入る値は
*4 の値 = 1 (A2 の年の B2 の月の一日が *3 の値の曜日のとき)
#4+1(A2 の年の B2 の月の一日が *3 の値の曜日より前のとき)
0 (A2 の年の B2 の月の一日が *3 の値の曜日より後のとき)
(* は C 〜 H のいずれかの記号, # は * の一つ前の記号, たとえば *=G のとき #=F)この条件を式で表すと
IF( WHATDAY($A2, $B2, 1) = C3, 1, IF ( WHATDAY($A2, $B2, 1) < C3, B4+1, 0))
$A2, $B2 は年、月を指定しているため複写しても固定しなければいけない。よって $ が必要である。一方 C3, B4 については行(横の列)による複写によって位置関係を動かす必要があるため、C, B には $ をつけない形で表さなければいけない([イ]には解答群の0.が入る)
第2週以降の日付は「前週の土曜日の日付+曜日の値」で求められる。
「前週の土曜日の日付」は複写によって週は動くが、曜日は動かないようにしなければいけない。
「曜日の値」は3行目の各値を当てはめるため、行による位置関係を固定し、列による位置関係は動かさなければいけない。よって B5 に $H4+B$3(順に解答群の1.と2.が入る)を入力して H9 まで複写させる。
問2.
各月の日数を表示させるワークシート月日数表を作成する。B1 に入力された年にもとづいて、A3 〜 A14 には各月の日数を B3 〜 B14 に表示する。
規則1 400 で割り切れる年は閏年
規則2 上記以外の 100 で割り切れる年は平年
規則3 上記以外の 4 で割り切れる年は閏年
規則4 上記以外は平年
100 で割り切れる年は、400 で割り切れる年ならば閏年、そうでなければ平年。
規則3,4から100 で割り切れない年は、4 で割り切れる年ならば閏年、そうでなければ平年。
以上から閏年になる年の条件は
(「100 で割り切れる」かつ「400 で割り切れる」)または
(「100 で割り切れない」かつ「4 で割り切れる」)
となる。しかし、前者の条件は「400 で割り切れる」のみで十分であるため、
(「400 で割り切れる」)または(「100 で割り切れない」かつ「4 で割り切れる」)
(順に解答群の0.と3.が入る)という条件になる。この条件を計算式で表すことを考える。「400 で割り切れる」という条件を式で表すと MOD(B1, 400)=0 となるためことを踏まえると、計算式はIF( OR( MOD(B1, 400) = 0, AND( MOD(B1, 100) ≠ 0, MOD(B1, 4) = 0)), 29, 28)
となる。(順に解答群の6.1.3.2.が入る)問3.
曜日計算表の月の値(B2 番地)を月日数表の月の列から検索
→ 検索した月に対応する最終日を C2 番地に表示
という手順で表示を行う。
月日数表の月の列は「月日数表!A3 〜 月日数表!A14」
月日数表の最終日の列は「月日数表!B3 〜 月日数表!B14」
であるため、PICKUP 関数を使って、次の計算式を曜日計算表の C2 番地に入力する。
PICKUP( 月日数表!A3 〜 月日数表!A14, B2, 月日数表!B3 〜 月日数表!B14 )
(順に解答群の4.2.3.が入る)最後に月カレンダーの A3 〜 G8 に曜日計算表の B4 〜 H9 の値を表示させるが、 セルの値が1以上で月の最終日(曜日計算表!C2)以下の範囲のときのみに値を表示させ、それ以外の場合は空白にするため、A3 番地に以下の形の計算式を入力する。
IF( AND( 曜日計算表!B4 >=1, 曜日計算表!B4 <= 曜日計算表!C2 ), 曜日計算表!B4 ,"" )
これを G8 まで複写するとき、「曜日計算表!B4」の「B4」を B4 〜 H9 に変える必要があるため、「B4」には $ をつけない。一方「曜日計算表!C2」は最終日であるため「C2」は複写によって変えることはできない。よって「C2」には両方に $ をつける。 よって A3 番地に入力する計算式は以下のものになる。IF( AND( 曜日計算表!B4 >=1, 曜日計算表!B4 <= 曜日計算表!$C$2 ), 曜日計算表!B4 ,"" )
(順に解答群の1.4.b.が入る)
数学とクイズでくつろいで<数学の部屋<どこよりも遅い!センター試験数学 解説<情報関連基礎第4問 解説