HOME»基本情報技術者平成30年春期問題»午後問13
基本情報技術者過去問題 平成30年春期 午後問13
⇄問題文と設問を画面2分割で開く⇱問題PDF⇱表計算ソフトの機能・用語問13 ソフトウェア開発(表計算)
次の表計算のワークシート及びマクロの説明を読んで,設問1,2に答えよ。
〔表計算の説明〕
Z社は現在,表計算ソフトを用いた会議室の予約システムを作成中である。会議室は15室あり,それぞれ一意の会議室番号が振られている。また,収容可能人数(以下,定員という)は同一ではなく,スクリーンがある会議室とない会議室がある。会議室の利用は9時から21時まで可能である。予約システムは,ワークシート"会議室選定"とワークシート"予約リスト"で構成される。
〔ワークシート:会議室選定〕
はじめに,ワークシート"会議室選定"を作成した。ワークシート"会議室選定"の例を,図1に示す。
〔ワークシート:予約リスト〕
予約の一覧は,ワークシート"予約リスト"に格納されている。ワークシート"予約リスト"の例を,図2に示す。
〔表計算の説明〕
Z社は現在,表計算ソフトを用いた会議室の予約システムを作成中である。会議室は15室あり,それぞれ一意の会議室番号が振られている。また,収容可能人数(以下,定員という)は同一ではなく,スクリーンがある会議室とない会議室がある。会議室の利用は9時から21時まで可能である。予約システムは,ワークシート"会議室選定"とワークシート"予約リスト"で構成される。
〔ワークシート:会議室選定〕
はじめに,ワークシート"会議室選定"を作成した。ワークシート"会議室選定"の例を,図1に示す。
- セル A2~A16 には,会議室番号が入力されている。セル B2~B16 には,会議室の定員が入力されている。セル C2~C16 には,スクリーンがある会議室であれば"有"が,そうでなければ"無"が入力されている。
- 予約したい会議室の条件を,セル A19~E19 に入力する。セル A19 に会議室の利用日を,セル B19 に開始時刻を,セル C19 に終了時刻を入力する。セル D19 には,利用人数を入力する。セル E19 には,スクリーンの利用を希望する場合は"要"を,そうでない場合は"不要"を入力する。終了時刻は開始時刻よりも後でなければならない。日付は YYYYMMDD,時刻は hhmm の形式で表現される整数値である。
- (2)で条件を入力した後,ワークシート"会議室選定"に格納されているマクロ SelectRoom を実行すると,ワークシート"予約リスト"に格納されている予約の一覧を参照し,会議室ごとに,条件に指定した利用日の開始時刻から終了時刻までの間(開始時刻及び終了時刻を含まない)に他の予約が入っていない場合は"可"を,そうでなければ"否"を,セル D2~D16 に格納する。
- セル E2~E16 には,対応する会議室の収容率を求める式が入力されている。ここで収容率は,次の式で求める。ただし,利用人数が定員を超える場合,スクリーンの利用を希望しているのに会議室にスクリーンがない場合,又は当該行の列Dの値が"否"の場合は,収容率は 0 にする。
- セル A22 には,推奨会議室の会議室番号を表示する式が入力されている。ここで,推奨会議室とは,収容率が最も大きな正の値となる会議室である。ただし,この収容率が等しい会議室が複数あるとき,それらの中で表の最も上に位置する会議室番号を表示する。また,条件を満たす会議室がないときには,"なし"を表示する。
〔ワークシート:予約リスト〕
予約の一覧は,ワークシート"予約リスト"に格納されている。ワークシート"予約リスト"の例を,図2に示す。
- 1件の予約のデータが1行に入力されている。列Aには,予約ごとに一意となる予約IDが格納されている。
- 列Bには利用日,列Cには開始時刻,列Dには終了時刻,列Eには利用人数が格納されている。日付は YYYYMMDD,時刻は hhmm の形式で表現される整数値である。
- 列Fには,スクリーンの利用を希望する場合は"要"が,そうでない場合は"不要"が格納されている。
- 列Gには,予約された会議室番号が格納されている。
- 予約のデータは,利用日の昇順に常に整列されている。
- 新しい予約のデータを登録するには,ワークシート"予約リスト"に格納されているマクロ Register を実行する。また,予約総数は 9,998 件までとし,データの最終行よりも下の行の列A~Gの各セルには空値が格納されている。
- 会議室の予約は9時から21時まで行うことができる。21時を過ぎたら直ちに,ワークシート"予約リスト"に格納されているマクロ Update を実行する。マクロ Update は,利用が終了した予約のデータを予約の一覧から消去するために,その予約のデータの入った行より下の行の予約のデータを上方向に詰める。
- マクロ Register,Update,SelectRoom は,いずれもその実行中に他のマクロが実行されることはない。
設問1
ワークシート"会議室選定"に関する次の記述中の に入れる正しい答えを,解答群の中から選べ。
- 次の式をセル E2 に入力し,セル E3~E16 に複写する。
IF(論理和(a),0,D$19/B2) - 次の式を,セル A22 に入力する。
IF(b,'なし',c)
a に関する解答群
- 論理積(E$19='要',C2='有'),D2='否',D$19>B2
- 論理積(E$19='要',C2='無'),D2='否',D$19>B2
- 論理積(E$19='要',C2='有',D2='否'),D$19>B2
- 論理積(E$19='要',C2='無',D2='否'),D$19>B2
- 論理積(E$19='不要',C2='有'),D2='否',D$19>B2
- 論理積(E$19='不要',C2='無'),D2='否',D$19>B2
- 論理積(E$19='不要',C2='有',D2='否'),D$19>B2
- 論理積(E$19='不要',C2='無',D2='否'),D$19>B2
b に関する解答群
- 最小(E2:E16)=0
- 最小(E2:E16)=1
- 最小(E2:E16)>0
- 最小(E2:E16)<1
- 最大(E2:E16)=0
- 最大(E2:E16)=1
- 最大(E2:E16)>0
- 最大(E2:E16)<1
c に関する解答群
- 照合一致(最小(E2:E16),E2:E16,0)
- 照合一致(最大(E2:E16),E2:E16,0)
- 照合検索(最小(E2:E16),E2:E16,A2:A16)
- 照合検索(最大(E2:E16),E2:E16,A2:A16)
- 表引き(A2:A16,順位(最小(E2:E16),E2:E16,0),1)
- 表引き(A2:A16,順位(最大(E2:E16),E2:E16,0),1)
解答選択欄
- a:
- b:
- c:
解答
- a=イ
- b=オ
- c=エ
解説
〔aについて〕
aの論理式の結果が"偽"の場合は「利用人数÷定員」の値を表示し、真の場合は収容率として"0"を表示します。
「ア」は、スクリーン希望が"要"で、会議室にスクリーンが"有"の場合、すなわち希望に合致する場合にも0を表示してしまうため誤りです。
「ウ」「エ」「キ」「ク」は、論理積の式に③の条件を含めてしまっているので誤りです。
「オ」「カ」は、スクリーン(要望)に"不要"を指定しているので誤りです。
〔b、cについて〕
A22(推奨会議室)には、収容率が最も大きな正の値となる会議室の会議室番号を表示し、もし収容率が等しい会議室が複数あるときには、それらの中で表の最も上に位置する会議室番号を表示します。今回は上の条件を満たす会議室がないときは"なし"表示とするので、bの結果が真の場合は、"なし"表示を、偽の場合には、cの会議室を表示する式を選択する必要があります。
E列(収容率)は、希望に合致する会議室がない場合は"0"を表示する仕様なので、この列の最大値が0ということは「すべて0だった→"なし"」となります。したがって、最大値取得の結果が0と等しいという式を指定する「オ」の「最大(E2:E16)=0」が正解です。
「ア」「イ」「ウ」「エ」はいずれも収容率の最小値を求めるので誤りです。
「カ」「キ」「ク」は、条件に合致する会議室が存在するときでも'なし'と表示されてしまうため誤りです。
cには、bの論理式の結果が偽だった場合、すなわち条件に合致する会議室があったときに表示する値を決める式が入ります。A22には、推奨会議室の会議室番号を表示する仕様なので、cの式は、E列(収容率)の値が最大の収容率である会議室番号を選択するものでなくてはなりません。
E列の中で最大値をもつ行の会議室番号がわかればよいので、"照合検索"の検索式にE列の最大値を求める「最大(E2:E16)」を、検索範囲に「E2:E16」を、抽出する範囲に会議室番号を保持する「A2:A16」を指定すれば実現可能です。"照合検索"は、検索のセル範囲を左端又は上端から走査し、式の値と一致する最初のセルを探します。検索値を持つ行が複数あった場合には最初に一致したセルを引用するので、収容率が等しい会議室が複数あったときに、それらの中で表の最も上に位置する会議番号を表示する仕様を満たします。
「ア」「イ」の"照合一致"は、セルの値ではなくセルの位置を返す関数なので誤りです。
「ウ」は、最大値ではなく最小値を検索値としているため誤りです。
「オ」「カ」の"表引き"は、順位の返り値を行位置として用いているため誤りです。
aの論理式の結果が"偽"の場合は「利用人数÷定員」の値を表示し、真の場合は収容率として"0"を表示します。
IF 論理和(a)
真の場合:0
偽の場合:D$19/B2
ワークシート〔会議室選定〕(4)で説明されている通り、E2~E16には収容率の値を表示する式が入ります。ただし、以下の3つのケースに該当する場合には0を表示する仕様になっています。真の場合:0
偽の場合:D$19/B2
- 利用人数が定員を超える場合
- スクリーン利用を希望しているのに会議室にスクリーンがない場合
- 当該列の列Dの値が"否"の場合
- ①利用人数が定員を超える場合
- D$19>B2
- ②スクリーンの利用を希望しているのに会議室にスクリーンがない場合
- 論理積(E$19='要',C2='無')
- ③当該行の列Dの値が"否"の場合
- D2='否'
「ア」は、スクリーン希望が"要"で、会議室にスクリーンが"有"の場合、すなわち希望に合致する場合にも0を表示してしまうため誤りです。
「ウ」「エ」「キ」「ク」は、論理積の式に③の条件を含めてしまっているので誤りです。
「オ」「カ」は、スクリーン(要望)に"不要"を指定しているので誤りです。
〔b、cについて〕
A22(推奨会議室)には、収容率が最も大きな正の値となる会議室の会議室番号を表示し、もし収容率が等しい会議室が複数あるときには、それらの中で表の最も上に位置する会議室番号を表示します。今回は上の条件を満たす会議室がないときは"なし"表示とするので、bの結果が真の場合は、"なし"表示を、偽の場合には、cの会議室を表示する式を選択する必要があります。
IF b
真の場合:'なし'
偽の場合:c
bには、E列(収容率)の範囲 E2:E16 の中で最大値を求める関数を使用します。ここでのポイントは、ここで求めた最大値が0だった場合は真(該当会議室"なし")となる論理式にする必要があることです。真の場合:'なし'
偽の場合:c
E列(収容率)は、希望に合致する会議室がない場合は"0"を表示する仕様なので、この列の最大値が0ということは「すべて0だった→"なし"」となります。したがって、最大値取得の結果が0と等しいという式を指定する「オ」の「最大(E2:E16)=0」が正解です。
「ア」「イ」「ウ」「エ」はいずれも収容率の最小値を求めるので誤りです。
「カ」「キ」「ク」は、条件に合致する会議室が存在するときでも'なし'と表示されてしまうため誤りです。
cには、bの論理式の結果が偽だった場合、すなわち条件に合致する会議室があったときに表示する値を決める式が入ります。A22には、推奨会議室の会議室番号を表示する仕様なので、cの式は、E列(収容率)の値が最大の収容率である会議室番号を選択するものでなくてはなりません。
E列の中で最大値をもつ行の会議室番号がわかればよいので、"照合検索"の検索式にE列の最大値を求める「最大(E2:E16)」を、検索範囲に「E2:E16」を、抽出する範囲に会議室番号を保持する「A2:A16」を指定すれば実現可能です。"照合検索"は、検索のセル範囲を左端又は上端から走査し、式の値と一致する最初のセルを探します。検索値を持つ行が複数あった場合には最初に一致したセルを引用するので、収容率が等しい会議室が複数あったときに、それらの中で表の最も上に位置する会議番号を表示する仕様を満たします。
「ア」「イ」の"照合一致"は、セルの値ではなくセルの位置を返す関数なので誤りです。
「ウ」は、最大値ではなく最小値を検索値としているため誤りです。
「オ」「カ」の"表引き"は、順位の返り値を行位置として用いているため誤りです。
設問2
マクロ SelectRoom 中の に入れる正しい答えを,解答群の中から選べ。
d に関する解答群
- 論理積(表引き(予約リスト!C2:C10000,J,1)≧C19,
表引き(予約リスト!D2:D10000,J,1)≦B19) - 論理積(表引き(予約リスト!C2:C10000,J,1)≦C19,
表引き(予約リスト!D2:D10000,J,1)≧B19) - 論理積(表引き(予約リスト!D2:D10000,J,1)≧C19,
表引き(予約リスト!C2:C10000,J,1)≦B19) - 論理積(表引き(予約リスト!D2:D10000,J,1)≦C19,
表引き(予約リスト!C2:C10000,J,1)≧B19) - 論理和(表引き(予約リスト!C2:C10000,J,1)≧C19,
表引き(予約リスト!D2:D10000,J,1)≦B19) - 論理和(表引き(予約リスト!C2:C10000,J,1)≦C19,
表引き(予約リスト!D2:D10000,J,1)≧B19) - 論理和(表引き(予約リスト!D2:D10000,J,1)≧C19,
表引き(予約リスト!C2:C10000,J,1)≦B19) - 論理和(表引き(予約リスト!D2:D10000,J,1)≦C19,
表引き(予約リスト!C2:C10000,J,1)≧B19)
e に関する解答群
- 相対(D2,J-1,0)
- 相対(D2,J,0)
- 相対(D2,照合一致(表引き(予約リスト!G2:G10000,J,1),
A2:A16,0)-1,0) - 相対(D2,照合一致(表引き(予約リスト!G2:G10000,J,1),
予約リスト!G2:G10000,0)-1,0) - 相対(D2,照合一致(予約リスト!G2,A2:A16,0)-1,0)
- 相対(D2,照合一致(予約リスト!G2,A2:A16,1)-1,0)
f に関する解答群
- 表引き(予約リスト!B2:B10000,J,1)=A19
- 表引き(予約リスト!B2:B10000,J,1)=null
- 表引き(予約リスト!B2:B10000,J,1)≠A19
- 表引き(予約リスト!B2:B10000,J,1)≠null
- 表引き(予約リスト!C2:C10000,J,1)<B19
- 表引き(予約リスト!D2:D10000,J,1)>C19
解答選択欄
- d:
- e:
- f:
解答
- d=オ
- e=ウ
- f=ア
解説
マクロ SelectRoomの動作は〔ワークシート:会議室選定〕(3)にて説明されています。
本マクロは、以下の手順でD列の"可"または"否"を表示します。
〔dについて〕
該当する会議室のD列(使用可否)のセル D2~D16 に"否"を格納する場合、すなわち使用不可のときに真となる条件式を選択します。否定(d)となっているので、dには使用可のときに真となる条件式を選ばなくてはなりません。
比較対象のセルは以下の4つです。
この2つを論理和で評価した式が適切となります。したがって、C19≦"予約リスト"C列、"予約リスト"D列≦B19 となっている「オ」の式が正解です。
〔eについて〕
カウンタ変数Jを使用して該当する会議室のセル D2~D16(使用可否) に、"否"を格納する処理を選択します。
まず変数Jが何を意味しているかを確認しましょう。変数Jはループ開始前に以下の式で初期化されています。
まず次の操作によって、'否'にすべき会議室番号を取得します。
以上より「ウ」の式が、格納先セルを指定する式として適切です。
〔fについて〕
ループの継続条件が入ります。予約のデータは利用日の昇順に常に整列されており、ループでは当該利用日の予約を保持する行を上から1行ずつ走査をしていきます。よって、ワークシート"予約リスト"のB列(利用日)と、ワークシート"会議室選定"A19(利用日)が等しい間ループ文を実行する式が適切となります。
正しい式は「ア」です。
本マクロは、以下の手順でD列の"可"または"否"を表示します。
- ワークシート"会議室選定"の D2~D16(使用可否) のセルを全て"可"で初期化する
- ワークシート"予約リスト"の一覧を参照し、各会議室ごとに(希望の)利用日、時間内に他の予約が入っていないかをチェックする
- 他の予約が入っていたら、該当する会議室のセル D2~D16 に"否"を格納する
〔dについて〕
該当する会議室のD列(使用可否)のセル D2~D16 に"否"を格納する場合、すなわち使用不可のときに真となる条件式を選択します。否定(d)となっているので、dには使用可のときに真となる条件式を選ばなくてはなりません。
比較対象のセルは以下の4つです。
- ワークシート"会議室選定" B19(開始時刻)
- ワークシート"会議室選定" C19(終了時刻)
- ワークシート"予約リスト" C列の各セル(開始時刻)
- ワークシート"予約リスト" D列の各セル(終了時刻)
- ②希望する終了時刻が、③予約リスト内の開始時刻よりも前
- ①希望する開始時刻が、④予約リスト内の終了時刻よりも後
この2つを論理和で評価した式が適切となります。したがって、C19≦"予約リスト"C列、"予約リスト"D列≦B19 となっている「オ」の式が正解です。
〔eについて〕
カウンタ変数Jを使用して該当する会議室のセル D2~D16(使用可否) に、"否"を格納する処理を選択します。
まず変数Jが何を意味しているかを確認しましょう。変数Jはループ開始前に以下の式で初期化されています。
J ← 照合一致(A19, 予約リスト!B2:B10000, 0)
この処理では、利用日の昇順に整列されたワークシート"予約リスト"の行のうち、希望日と一致する最も上の行の位置を返します。ループ処理では、Jの位置を先頭に当該希望日の予約情報を1行ずつ走査します。現在処理中の行位置はJに保持されているため、当該行のG列(会議室番号)の値から'否'にすべき会議室番号を取得できます。まず次の操作によって、'否'にすべき会議室番号を取得します。
表引き(予約リスト!G2:G10000), J, 1)
次にワークシート"会議室選定"のA列から当該会議室番号の値をもつ行の位置を取得します。照合一致([会議室番号], A2:A16, 0)
最後に"相対"によって'否'にすべきセルの位置を指定します。相対(D2, [会議室番号の行位置]-1, 0)
ここで、行位置を-1しているのは、照合一致が1,2,…の数を返すのに対して、相対では基準セルからの位置を0,1,…で指定するからです。以上より「ウ」の式が、格納先セルを指定する式として適切です。
〔fについて〕
ループの継続条件が入ります。予約のデータは利用日の昇順に常に整列されており、ループでは当該利用日の予約を保持する行を上から1行ずつ走査をしていきます。よって、ワークシート"予約リスト"のB列(利用日)と、ワークシート"会議室選定"A19(利用日)が等しい間ループ文を実行する式が適切となります。
正しい式は「ア」です。
- 正しい。
- 1行を処理した時点でループが終了してしまうので誤りです。
- 1行を処理した時点でループが終了してしまうので誤りです。
- 希望利用日以降の全ての日の予約情報を処理し終えるまでループが継続するので誤りです。
- "開始時刻"を比較しているため誤りです。
- "終了時刻"を比較しているため誤りです。