数学とクイズでくつろいで数学の部屋どこよりも遅い!センター試験数学 解説情報関連基礎第4問 解説

どこよりも遅い!情報関連基礎第4問 解説

最終更新日2010年4月6日

第4問は表計算ソフトウェアを用いて、年(西暦)と月からその月のカレンダーを表示するワークシート月カレンダーを作成する問題。この月カレンダーは A1 番地に西暦を、C1 番地に月を入力すると、セル範囲 A3 〜 G8 に該当する日を表示させるようにする。

問1 

 まず西暦、月、日からその月の第何週の何曜日かを計算するワークシート曜日計算表を作成する。この表の A2 番地に月カレンダーの西暦 (月カレンダー!A1), B2 番地に月カレンダーの月 (月カレンダー!C1) を入力する。B3〜H3 には曜日を表す 1〜7, A4〜A9 には第何週かを表す 1〜6 を入力した。
 曜日を出力する関数として WHATDAY 関数を使う。

B4 の値 = 1(A2 の年の B2 の月の一日が日曜日のとき、つまり WHATDAY($A2, $B2, 1)=1 のとき)
      0(A2 の年の B2 の月の一日が日曜日以外のとき、つまり WHATDAY($A2, $B2, 1)≠1 のとき)

となるため、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 に表示する。

日数は2月以外は確定しているが、2月は平年が28日、閏年が29日となっている。平年と閏年は以下の規則に基づいて決定される。

規則1 400 で割り切れる年は閏年
規則2 上記以外の 100 で割り切れる年は平年
規則3 上記以外の 4 で割り切れる年は閏年
規則4 上記以外は平年

規則1,2から

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.

月日数表を参照して、曜日計算表の C2 番地にその月の最終日を表示する。

曜日計算表の月の値(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問 解説