Ver 1.10 2000/11/12
すー:先生,いよいよ,明日,テストですね。
ジャン:表計算,まだ,解説してません。この号だけもなんとか出しましょう。
すー:表計算といえば,マイクロソフト社のエクセルが有名ですね。
ジャン:むかし,AppleII(アップル ツー)というパソコン動作する,ビジカルクというソフトが発売されました。これが,表計算の最初ですね。
すー:私は,ロータス社の1-2-3は知ってますよ。
ジャン:それは,表計算の有名なところの3番目だと思います。2番目は,マイクロソフト社のマルチプラン,3番目が1-2-3,4番目が今,はやっているマイクロソフト社のエクセルですね。
すー:最初,1-2-3を使って,簡単な表計算をしたときに,これで,縦横の計算の集計の合計が合わなくての苦労から解放されるって,感動しました。
ジャン:パソコンの画面にセルというマスを並べて,そのマスに,計算式を定義して,自動的に計算するというのは,ソフトウエアの歴史の中でも画期的でした。それまで,コンピュータに計算させるというのは,Fortranなどで,プログラムを書いて,それを実行させるというのが当たり前でした。それが,画面に向かって,チョとちょいのちょいですからね。
すー:1-2-3では,グラフの書けましたからね。
ジャン:このソフトによって,IBM-PCが当時のアップルツーをさしおいて,売れ始めた要因かもしれませんね。
すー:表計算が生まれていなかったら,初級シスアドのテストもなかったかもしれませんね。
ジャン:そうですね。DOSのころ,マイクロソフト社は,マルチプランというソフトで表計算ソフトを販売していた,日本ではNECの98用にかなりうれたんですよ。その後,98用のロータスの1-2-3も販売されて,マルチプランは,だんだん追いつめれていきます。アメリカでは,IBM-PC+1-2-3に追いつめられた,アップル社が,マック+エクセルで毎返しを図ります。
すー:エクセルは,最初は,マック用なんですか。
ジャン:アップル社のマックのGUIを利用して,マイクロソフト社がエクセルを開発します。マルチプランのGUIバージョンですね。かなりかわりましたけど。このころ,アップル社もマイクロソフト社もゼロックスのパルアルト研究所でGUIなどの研究者を引き抜きをしています。雇っている会社は変わったかもしれませんが,作成している人間は同じだったかもしれませんね。
すー:ロータスの1-2-3と比べて,マイクロソフトのエクセルの方が,画面かっこいいですよね。
ジャン:このころの開発のノウハウをもって,後にマイクロソフトがWindowsの開発に入っていきます。
すー:エクセルを動作さるためのOSとして,Windowsを販売したのですか?
ジャン:これは,また,極端ですけど,そういう面はあります。アメリカのパソコン界では,ハード面では,アップルツー対IBM-PCで,IBM-PCの勝利,ロータスの1-2-3の普及
アップルがマックで巻き返し,そこで,マクロソフト社のエクセル登場
マック,IBM互換機に悩まされた,IBMが,IBM-PCを捨てて,PS/2+GUIのOS/2を販売
OS/2は,マイクロソフト社とIBM社との共同開発。→失敗。
マイクロソフト社,OS/2を見捨てて,Windowsに集中。成功,IBM怒る。アップル怒る。いつのまにか,マック用のエクセルは,IBM互換機用のOSのWindowsで動作するソフトとして爆発的ヒット。
すー:そんな流れがあったのですね。
ジャン:マイクロソフト社のソフトでいくつかすごいものがありますが,エクセルはVBと並んで,すごいソフトですよ。
すー:マイクロソフト社のやり方は嫌いだけど,エクセルとかVBが好きという人,結構いますよね。
ジャン:私の尊敬しているプロの何人かは,同じ意見ですよ。
すー:私もエクセル好きですよ。ただ,品質もっとあげてほしい。抽出でよくこけます。
ジャン:品質がわると苦労しますよね。
すー:私,何回も泣かされました。
ジャン:そういうところで,問題に入りましょうか。
すー:はい。
問6 表計算を利用した万年カレンダの作成に関する次の記述を読んで,設問1〜6に答えよ。
Wさんは経理部に所属し,支払い小切手や手形の管理を担当しているので,銀行の休業日を知る必要がある。前年や翌年のカレンダまでめくらなければならず,面倒な思いをしている。
そこで,決済伝票の記録に使っている表計算ソフトのワークシート上に,指定した年月の1か月分のカレンダを表示すれば,手間が省けると考えた。
Wさんが用いたカレンダの計算アルゴリズムは,次のとおりである。
〔計算のアルゴリズム〕
(1) うるう年の判定方法は,“年が4の倍数をうるう年とする。ただし,100の倍数で,400の倍数でない年はうるう年ではない。”としている。以下,うるう年ではない年を平年という。
(2) 起算日を西暦元年1月1日(月曜日)とし,起算日からの延べ日数を7で割り,余りである0〜6(以下,曜日コードという)を日曜日〜土曜日に対応させると曜日が求まる。
(3) 平年では,1年の日数が365日であることから,翌年の1月1日の曜日は一つ進む。
このアルゴリズムを使って完成したワークシートは,図のようになった。

〔作成したワークシートの説明〕
(1) セルB3,B4はそれぞれ指定年と指定月の入力域である。
(2) セルB5は指定年がうるう年であれば1,平年であれば0である。
(3) セルB7〜B18は毎月の日数である。セルB8を除き定数である。セルB8はセルB5の値を判定して設定している。
(4) セルC7〜C18は指定月の前月までの各月の日数である。セルC19はセルC7〜C18の合計値で,指定年内の前月までの延べ日数である。
(5) セルD7〜D18の指定月に対応するセルはその指定月の日数で,他のセルは0である。セルD19は指定月の最終日である。
(6) セルB20は西暦元年1月1日から指定年月の1日までの,延べ日数(前年までのうるう年は考慮していいない)である。セルB21はセルB20の値にうるう年を考慮した延べ日数である。
(7) セルB22は指定年月の1日の曜日コードである。
(8) セルB23〜H23は,曜日コードである。セルI23〜AL23は曜日コードより大きな定数7を設定している。
(9) セルB24〜AL25は,指定年月の完成したカレンダである。
設問1 指定された年がうるう年ならば1,平年であれば0となるような計算式を,セルB5に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
IF(剰余([ a ],4)[ b ] 0,0,
IF(剰余([ c ],100)[
d ] 0,1,
IF(剰余([ e ],400)[ f ] 0,1,0)))
a,c,eに関する解答群
ア B3
イ B6
ウ (B3−1)
エ (B3+1)
オ (B6−1)
カ (B6+1)
b.d.f に関する解答1群
ア =
イ ≠
ウ >
エ <
オ ≦
カ ≧
設問2
指定月の前月までの各月の日数を求める計算式をセルC7に入力し,セルC8〜C18に複写した。計算式の[
]に入れる適切な字句を,解答群の中から選べ。
IF([ g ][ h ][ i ],[ j ], 0)
g,i,j に関する解答群
ア A7
イ A8
ウ B4
エ B7
オ $B$4
カ (B7+B8)
キ (B7+C6)
h に関する解答群
ア =
イ ≠
ウ <
エ ≦
設問3 延べ日数1を求める計算式をセル B20 に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
([ k ])*365+[ l ]
k,l に関する解答群
ア B3−1
イ B3
ウ B3+1
エ C19−1
オ C19
カ C19+1
キ C19+D19−1
ク C19+D19
ケ C19+D19+1
設問4 延べ日数2を求める計算式をセル B21 に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
B20[ m ]整数部([ n ]/4)
[ o ]整数部([
n ]/100)
[ p ]整数部([ n ]/400)
m,o,p に関する解答群
ア +
イ −
ウ *
エ /
n に関する解答群
ア B3
イ B20
ウ (B3+1)
エ (B3−1)
オ (B20−1)
カ (B20+1)
設問5 指定月の1日の曜日を求める計算式をセル B22 に入力した。計算式として正しいものを,解答群の中から選べ。
解答群
ア 剰余(B20,7)
イ 剰余(B21,7)
ウ 剰余((B21+C19+1),7)
エ 整数(B20/7)
オ 整数(B21/7)
カ整数((B21+C19+1)/7)
設問6 カレンダを表示する考え方に基づいた計算式を,セル B25 に入力し,セル C25〜AL25 に複写した。セル B25 の計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
考え方は次のとおりである。
(1) 指定月の 1 日より前の日は空白文字(スペース)を表示する。
(2) 指定月の 1 日の曜日から日を表示する。
(3) 2 日以降の日は前の日に 1 を加えた日とする。
(4) 日が指定月の日数より大きくなったら,空白文字(スペース)を表示する。
IF ($B$22[ q ][ r ],
IF ($B$22[ s ][ t ],1,’’),
IF ([ u ]=’’,’’,
IF ($D$19[ v ][ w ],’’,[ x ])))
注 1,2 行目は考え方の (1) と (2) の処理,3,4 行目は考え方の (3) と (4) の処理を行っている。
r,t,u,w,x に関する解答群
ア A23
イ A25
ウ B23
エ B25
オ (A23+1)
カ (A25+1)
キ (B23+1)
ク (B25+1)
q,s,v に関する解答群
ア =
イ ≠
ウ <
エ ≦
オ >
カ ≧
ジャン:では,設問1から,順にやりましょう。
すー:先生,その前の,表計算問題全体に関する技とかありますか。
ジャン:表計算だけではないですが,まず,経験ですね。実際,表計算ソフトを使いこなしてください。
すー:どのレベルですか。
ジャン:難しい機能はどちらでもいいですが,自分のツールの一つとして,必要に応じて,使えるようにしておいて下さい。
すー:先生,マクロ機能とかどうですか。
ジャン:マクロ機能はどちらでもいいです。マクロ機能は便利ですが副作用も多いです。後で分からなくなるとか,ウィルスにチェックがうるさいとかです。これも経験ですから,機会があれば挑戦して下さい。
すー:先生,問題を解くにあたっての注意は?
ジャン:表計算が使えれば解けるものではありません。これを意識して下さい。
すー:問題文に慣れておく必要があるということですか。
ジャン:そうです。
すー:過去問題をいくつか解いておけば大丈夫ですか。
ジャン:そうです。あと,他の午後問題と同じですが,問題文が長いです。設問中心に進めるのがコツです。
すー:はい。
ジャン:では,設問1から,やりましょう。
| 設問1
指定された年がうるう年ならば 1,平年であれば 0 となるような計算式を,セル
B5 に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
IF(剰余([ a ],4)[ b ] 0,0, a,c,e に関する解答群 ア B3 b.d.f に関する解答1群 ア = |
すー:剰余というのは,割った余りのことですね。
ジャン:そうです。すーちゃん,例を挙げてもらえますか。
すー:剰余(100,4)というのは,100 を 4 で割った余りということで,0 ですね。
ジャン:わり算の答えでは,商と余り(剰余)がありますが,。商の方は,たいていの言語では,DiVISONを利用しますね。省略してDIVです。今回の問題では,整数部(わり算の答え)といった形で出ていますね。
すー:先生,表計算の関数のうち,IF関数は,わかりにくいですね。
ジャン:これは,言葉で置き換えるといいですよ。IF(A1>0,3,5)という時は,「A1が0よりときは,3で,そうじゃないときは,5」と口の中でぶつぶつとやるといいですよ。設問に戻りましょう。
すー:先生,この計算式は,うるう年の計算の仕方ですね。4で割りきれ,100でわりなくて,ただし400で割り切れたうるう年というやつですね。
ジャン:みんな,2000 年問題で何度も目にしましたね。
すー:問題文の中でも,
| (1) うるう年の判定方法は,“年が4の倍数をうるう年とする。ただし,100の倍数で,400の倍数でない年はうるう年ではない。”としている。以下,うるう年ではない年を平年という。 |
ジャン:では,埋めてみましょう。
| IF(剰余([ a ],4)[ b ]
0,0, IF(剰余([ c ],100)[ d ] 0,1, IF(剰余([ e ],400)[ f ] 0,1,0))) a,c,e に関する解答群 ア B3 b.d.f に関する解答1群 ア = |
すー:指定年のマスをいろを付けておいた方が,いいですね。
ジャン:そうですね。
| 技: 主立ったマスには,色を付ける。 |
すー:a, c, e は,B3ですね。b, d, f は,≠,≠,=です。
| IF(剰余(B3,4) ≠ 0,0, IF(剰余(B3,100) ≠ 0,1, IF(剰余(B3,400) = 0,1,0))) |
設問1の解答は,こうですね。
| 初級システムアドミニストレータ午後平成11年秋問6設問1
a: ア B3 |
先生,f の = の代わりに,オの≦も動作しますが,どうでしょうか。
ジャン:動作しますが,論理的におかしいと思いますよ。b, d のところは,ウの>でもいいですね。こちらは,4の剰余ということで,0でないなら,1,2,3なので,いいと思います。
すー:先生,エクセルなどでは,≠ は,<> と書きます。
ジャン:そうですね。では,設問2に行きましょう。
| 設問2
指定月の前月までの各月の日数を求める計算式をセルC7に入力し,セルC8〜C18に複写した。計算式の[
]に入れる適切な字句を,解答群の中から選べ。
IF([ g ][ h ][ i ],[ j ], 0) g,i,j に関する解答群 ア A7 h に関する解答群 ア = |
すー:もし,○○だったら,j ,そうでなければ,0 ですね。
ジャン:ここで,IF 文を解読する技として,
|
技: |
すー:この場合なら,「でないなら0」から,理解しようということですか。
ジャン:「だったら,j ,そうでなければ,0」結論の節を理解してから,条件を検討することです。
すー:この問題の場合だと,累計の欄に,隣の月の日数が入りますね。ということは,「もし,○○だったら,隣の数i ,そうでなければ,0 」
ジャン:それでいいです。条件は,「月が指定月未満なら」ですね。
すー:答えは,
| IF ( A7 < $B$4 , B7, 0) |
解答は
| 初級システムアドミニストレータ午後平成11年秋問6設問2
g: ア A7 |
ジャン:よくできました。
すー:先生,未満と以下と間違えるときがあるのですけど。
ジャン:これは,漢字の意味を考えると間違えませんよ。未だ,以て(もって)ですから。
すー:これを覚えたころは,小学校の頃で,こんな漢字知りませんでいたから,小さい頃の難しいと感じたんですね。
ジャン:大きくなって,子供のころ遊んだ公園に行くと,公園が小さく感じるでしょう。それと同じことですよ。小さいころ難しかったことも,大人になって改めて勉強すると簡単です。次に行きましょう。
すー:はい。
| 設問3 延べ日数1を求める計算式をセル
B20 に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
([ k ])*365+[ l ] k,l に関する解答群 ア B3−1 |
ジャン:すーちゃん,「延べ日数1」ってどんな数字なんですか?
すー:本文をみると,次のようにあります。
| (6) セルB20は西暦元年1月1日から指定年月の1日までの,延べ日数(前年までのうるう年は考慮していいない)である。セルB21はセルB20の値にうるう年を考慮した延べ日数である。 |
ジャン:つまり,西暦2年2月2日なら,西暦1年分(365) + 指定年月の前の月まで(31) + 1 日ということですね。
すー:指定年を365倍して,その月のひと月前の末日まえの累計+1ですね。
| B3 *365 + C19 + 1 |
解答の記号は。
| 初級システムアドミニストレータ午後平成11年秋問6設問3
k: イ |
ジャン:表計算の穴埋めの技として,
|
技: |
すー:そうですね。解答群の,C19+1 とか,いったいどんな意味があるか分かりにくいですよね。この式は,何を表すかと正面から考えた方が分かりやすいですよね。
ジャン:設問の解答群からアプローチをするという受験テクニックにおぼれているとここは失敗しますね。設問4に行きましょう。
すー:はい。
| 設問4 延べ日数2を求める計算式をセル
B21 に入力した。計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
B20[ m ]整数部([ n ]/4) m,o,p に関する解答群 ア + n に関する解答群 ア B3 |
ジャン:これは,簡単でしたね。
すー:延べ日数に,そこまでのうる年の数をたすだけでいいですよね。設問1の変形です。
ジャン:こんな感じですね。
| B20 + 整数部((B3-1)/4) - 整数部((B3-1)/100) + 整数部((B3-1)/400) |
解答の記号は
| 初級システムアドミニストレータ午後平成11年秋問6設問4
m: ア + |
すー:先生,なんで,(B3-1) なんですか。
ジャン:ここ間違いやすいところですが,その年の延べ日数の判断は,C19で済んでいますよね。すでに延べ日数1でカウントされています。
すー:「←うるう年を考慮せず」のコメントは,本当は,「←昨年までのうるう年を考慮せず,ただし,今年のうるう年の考慮含む」なんですね。
ジャン:そうです。設問5に行きましょう。
| 設問5 指定月の1日の曜日を求める計算式をセル
B22
に入力した。計算式として正しいものを,解答群の中から選べ。
解答群 ア 剰余(B20,7) |
すー:これは,今までの設問をきちんとやれば,一発に分かりますね。延べ日数1には,指定月の1日の延べ日数,それに,うるう年をきちんと反映して,延べ日数2でしたので,延べ日数2に単純に7で割ればいいです。
ジャン:西暦元年の1月1日は,月曜ならそれでいいですけど。もし,火曜なら,対応がずれますね。
すー:先生,問題文にありますよ。
| (2) 起算日を西暦元年1月1日(月曜日)とし,起算日からの延べ日数を7で割り,余りである0〜6(以下,曜日コードという)を日曜日〜土曜日に対応させると曜日が求まる。 |
ジャン:さすがに,キリスト教ですね。月曜から始まりまりますね。感心。
すー:神様が6日かかって世界を作って,7日目に休むで,日曜なんですね。
ジャン:江戸時代の丁稚って,盆と暮れのお休みでしょう。もともと,一週間で1日休みというのは,キリキス教だけの特色なんでしょうかね。
すー:興味がありますね。解答例の記号だけ,整理しておきますね。
| 初級システムアドミニストレータ午後平成11年秋問6設問5
イ 剰余(B21, 7) |
ジャン:次に行きしょうか。設問6ですね。
| 設問6 カレンダを表示する考え方に基づいた計算式を,セル
B25 に入力し,セル C25〜AL25 に複写した。セル B25
の計算式の[ ]に入れる適切な字句を,解答群の中から選べ。解答は重複して選んでもよい。
考え方は次のとおりである。 (1) 指定月の 1 日より前の日は空白文字(スペース)を表示する。 (2) 指定月の 1 日の曜日から日を表示する。 (3) 2 日以降の日は前の日に 1 を加えた日とする。 (4) 日が指定月の日数より大きくなったら,空白文字(スペース)を表示する。 IF ($B$22[ q ][ r ], 注 1,2 行目は考え方の (1) と (2) の処理,3,4 行目は考え方の (3) と (4) の処理を行っている。 r,t,u,w,x に関する解答群 ア A23 q,s,v に関する解答群 ア = |
すー:先生,IF 文,4段ですよ。これは,面倒です。
ジャン:これは,大変ですね。まずは,結論部分を押さえましょう。
| IF ($B$22[ q ][ r ], IF ($B$22[ s ][ t ],1,’’), IF ([ u ]=’’,’’, IF ($D$19[ v ][ w ],’’,[ x ]))) |
すー:25の行は,空白か,その日のカレンダの日ですから,X には,そのカレンダの日が入ることがわかりますね。
ジャン:すーちゃん,賢いですね。
すー:先生,この設問は,重大なヒントありますよ。「注 1,2 行目は考え方の (1) と (2) の処理,3,4 行目は考え方の (3) と (4) の処理を行っている。」とあります。
ジャン:それで,大きいですよ。$B$22は,「指定月の1日の曜日」でしたね。1を表示するのは,23行目の数字が$B$22と一致した以降ですから,
| IF ($B$22 ≧ B23, IF ($B$22 = B23,1,’’), |
すー:これで,25行目の1より右がなんとかできましたね。あと2行。
| IF ($B$22 ≧ B23, IF ($B$22 = B23,1,’’), IF ([ u ]=’’,’’, IF ($D$19[ v ][ w ],’’,[ x ]))) |
ジャン:3行目は,''と等しいかを判断してますよね。これは,もう最後の空白の連続でしょう。前のセル=''なら,'' と言うことですね。
すー:最後,$D$19がなんとかでないとき,カレンダの日付を表示です。
ジャン:$D$19は?
すー:指定月の最終日です。つまり,指定月の最終日より,大きくなったら,日付を出さないということですね。
ジャン:ということは,
| IF ($D$19 = A25 ,’’,A25+1))) |
すー:これって,なんかテクニックですね。先生,すぐ分かったのですか。
ジャン:解答群から当てはめていろいろパターンを考えました。(^^);
すー:では,整理しますね。
| IF ($B$22 > B25, IF ($B$22 = B25,1,’’), IF (A25=’’,’’, IF ($D$19 = A25 ,’’,A25+1))) |
解答の記号を整理します。
| 初級システムアドミニストレータ午後平成11年秋問6設問6
q: カ ≧ |
ジャン:それでいいです。今回,IF 文がかなめでしたね。結論部からアプローチして見て下さい。
すー:先生,次の宿題,行きますか?
ジャン:次に向けて,勉強した人も見えるでしょう。宿題出しましょう。
(c)斎藤末広, 2000
許可無く再利用を禁止します。なお,情報処理技術者試験問題,サンプルプログラムはその限りではありません。