平成27年春期試験午後問題 問13

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問13 ソフトウェア開発(表計算)

次の表計算,ワークシート及びマクロの説明を読んで,設問1~3に答えよ。

〔表計算の説明〕
 ある会社では,社員ごとの社内向け学習教材の学習進捗状況を表計算ソフトで管理している。

〔ワークシート:学習進捗管理(単元記述部分)〕
  • 社員ごとにワークシート"学習進捗管理"が用意され,学習進捗状況が記載される。ワークシート"学習進捗管理"の単元記述部分である列A~Gの例を,図1に示す。
    pm13_1.gif
  • 学習教材は12の単元から構成されており,単元にはそれぞれ固有のIDが割り振られている。
  • セル A2~A13 には,単元のIDが昇順に格納されている。単元のIDは100から 昇順に100刻みで付与されている。
  • セル B2~B13 には,単元名が格納されている。
  • 各単元は複数の項目から構成されている。セル C2~C13 には,単元に含まれる 項目の学習順序(以下,項目学習順序という)が格納されている。セルの値が"任意"の場合はどの項目から学習してもよいことを示し,セルの値が"順次"の場合は各項目を項目のIDが小さいものから順番に学習しなければならないことを示している。
  • セル D2~D13 には,その単元の学習を開始してから完了するまでの学習に要する標準的な日数(以下,標準日数という)が格納されている。
  • セル E2~E13 とセル F2~F13 には,それぞれ対応する単元の学習を開始した日(以下,学習開始日という),学習を完了した日(以下,学習完了日という)がそれぞれマクロ StartLearning と FinishLearning を用いて設定される。日付は yyyy-mm-dd の形式で表示されるが,表計算ソフトの内部では1970年1月1日からの経過日数を整数値で保持している。計算にはこの内部の整数値を利用する。
  • セル G2~G13 には,それぞれの単元の学習に関する判定結果が表示される。学習完了日が設定されたとき,学習に要した日数が標準日数以下の場合には"○"が表示され,そうでなければ"△"が表示される。学習開始日も学習完了日も学習に要した日数に含まれる。ここで,休日は考慮せず,休日も1日と数える。例えば,学習開始日が2014年5月10日で学習完了日が2014年5月12日の場合,学習に要した日数は3である。また,学習完了日が設定されていない場合には空値が表示される。

設問1

ワークシート"学習進捗管理"に関する次の記述中の に入れる正しい答えを,解答群の中から選べ。

 それぞれの単元の学習が標準日数内に完了したかどうかを表示するために,次の式をセル G2 に入力し,セル G3~G13 に複写する。
  IF(F2=null,a)
a に関する解答群
  • IF(F2-E2+1≦D2,'〇','△'),null
  • IF(F2-E2≦D2,'〇','△'),null
  • IF(F2-E2-1≦D2,'〇','△'),null
  • null,IF(F2-E2+1≦D2,'〇','△')
  • null,IF(F2-E2≦D2,'〇','△')
  • null,IF(F2-E2-1≦D2,'〇','△')
解答選択欄
  • a:
  • a=

解説

aについて〕
IF文が真のとき、偽のときに返す式が入ります。

判定欄に出力する文字については(8)に説明されています。
  • 学習に要した日数が標準日数以下の場合には"○"が表示され,そうでなければ"△"が表示される。
  • 学習完了日が設定されていない場合には空値が表示される。
IF文の条件式は「F2 == null」となっていますが、セル F2 は学習完了日が入力されているセルです。学習完了日がnullということは未設定ということなので、この条件式が真のときにはnullを返すようになっている必要があります。
論理式:F2(学習完了日)が空値
 真の場合:何も表示しない(空値を表示)。
 偽の場合:出力処理を行う。
つまり「エ」「オ」「カ」のいずれかが正解の候補となります。

学習日数の算出については「学習開始日が2014年5月10日で学習完了日が2014年5月12日の場合,学習に要した日数は3である。」とあるように「学習完了日-学習開始日+1」、すなわち「F2-E2+1」で求められることがわかります。標準日数はセル D2 に設定されているので、この値以下であれば'〇'、そうでなければ'△'を表示すれば良いことになります。したがって偽のときの式は、
論理式:学習に要した日数が標準日数以下
 真の場合:"○"を出力する。
 偽の場合:"△"を出力する。
となります。したがって「エ」の式が適切です。

「オ」は学習開始日を含まない日数で比較するため誤り、「カ」は1日分減算した日数で比較するため誤りです。

a=エ:null,IF(F2-E2+1≦D2,'〇','△')
〔ワークシート:学習進捗管理(項目記述部分)〕
  • この学習教材の項目の総数は52である。ワークシート"学習進捗管理"の項目記述部分である列I~Mの例を,図2に示す。
    pm13_2.gif
  • セル I2~I53 には,項目のIDが昇順に格納されている。項目のIDは,その項目が属する単元のIDの下2桁を01から始まる連番にしたものである。
  • セル J2~J53 には,項目名が格納されている。
  • セル K2~K53 には,それぞれの項目が学習開始可能であれば"可"が表示され,そうでなければ"不可"が表示される。学習開始可能であるとは,次の条件①,②をともに満たしていることをいう。
    1. 項目が属する単元が学習開始可能である。単元が学習開始可能であるとは,単元のIDが100であるか,又は,より小さいIDの単元の学習が全て完了していることをいう。
    2. 次の条件(a)又は(b)のどちらかを満たしている。
      (a) 項目が属する単元の項目学習順序が"任意"である。
      (b) 項目が属する単元の項目学習順序が"順次"であり,その項目のIDの下2桁が01であるか,又は,その単元の中でより小さいIDの項目の学習が全て完了している。
  • セル L2~L53 とセル M2~M53 には,それぞれ対応する項目の学習開始日,学習完了日がそれぞれマクロ StartLearning とマクロ FinishLearning を用いて設定される。

設問2

ワークシート"学習進捗管理"に関する次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,関数"表引き"は,行の位置として0が指定された場合には,null を返すものとする。
  • それぞれの項目が学習開始可能か否かを表示するために,セル K2 に"可"を入力する。
  • 次の式をセル K3 に入力し,セル K4~K53 に複写する。
    pm13_3.gif
b に関する解答群
  • 照合一致(切捨て(I2,-2),$A$2~$A$13,0)
  • 照合一致(切捨て(I2,-2),$A$2~$A$13,0)-1
  • 照合一致(切捨て(I2,-2),$A$2~$A$13,0)+1
  • 照合一致(切捨て(I3,-2),$A$2~$A$13,0)
  • 照合一致(切捨て(I3,-2),$A$2~$A$13,0)-1
  • 照合一致(切捨て(I3,-2),$A$2~$A$13,0)+1
c に関する解答群
  • "順次"
  • "任意"
d に関する解答群
  • L3=null
  • L3≠null
  • M2=null
  • M2≠null
  • M3=null
  • M3≠null
解答選択欄
  • b:
  • c:
  • d:
  • b=
  • c=
  • d=

解説

bについて〕
表引きは、第1引数のセル範囲のうち指定された行位置と列位置のセルの値を返す関数です。第2引数の[b]には行位置を指定する数字が入ります。[b]を含む表引き関数は、(4)①の「より小さいIDの単元の学習が全て完了している」ことを確認するための式です。この確認をするためには、その項目が属する単元の1つ前の単元(項目IDが2xxならば100、項目IDが3xxならば200)の学習完了日が設定されているか否かを見ることになります。

まず項目IDとして参照するセルですが、式はセル K3 に入力されるので、項目IDとしては同じ行の項目IDであるセル I3 の値を使わなければなりません。この点からセル I2 を参照する「ア」「イ」「ウ」は誤りだとわかります。

照合一致は、第2引数のセル範囲を走査し、第1引数に合致するセルの位置を返す関数です。例えば、図2でセル I10(項目ID)の302から切捨て関数で単元IDの300を導出し照合一致に渡すと、A2~A13 内での300の行位置である3が返ります。
pm13_6.gif
表引きで参照したいのは1つ前の単元の学習完了日なので、照合検索で返ってきた行位置を-1した値を表引きの第2引数にするのが適切です。上記の例でいえば2を渡して、単元ID200の行の学習完了日を参照することになります。
pm13_7.gif
b=オ:照合一致(切捨て(I3,-2),$A$2~$A$13,0)-1

cについて〕
"順次"と"任意"の2択です。
垂直照合では、その行の項目IDが属する単元IDを、A2~A13から検索し、一致した行のC列(項目学習順序)の値を返します。問題文には「項目が属する単元の項目学習順序が"任意"である。」ことを学習開始可能の条件②にしているので、垂直照合の戻り値が"任意"であれば②の条件を満たす(論理和が真を返す)ことになります。

c=イ:"任意"

dについて〕
問題文の「その単元の中でより小さいIDの項目の学習が全て完了している。」を判定する式が入ります。これを判定するには、その項目の1つ前の項目に学習完了日が設定されているかどうかを確認することになります。式はセル K3 に入力されるので、1つ前の項目の学習完了日はセル M2 で参照できます。M列(学習完了日)の値は、学習が完了している場合には日付、そうでない場合にはnullになっているので、日付が設定されているときに真となるような式(≠null)にすれば、1つ前の項目が学習完了しているときに論理和の結果を真とすることができます。

d=エ:M2≠null

設問3

学習開始日を設定するマクロ StartLearning と学習完了日を設定するマクロ FinishLearning をワークシート"学習進捗管理"に格納した。マクロ StartLearning 中の に入れる正しい答えを,解答群の中から選べ。
  • セル O2 に学習を開始する項目のIDを入力し,マクロ StartLearning を実行すると,次の①,②をともに満たす場合,対応する項目の学習開始日にマクロが実行された日付を設定する。
    1. その項目が学習開始可能である。
    2. その項目の学習開始日が空値である。
     また,その項目が属する単元の学習開始日が空値ならば,単元の学習開始日にもマクロが実行された日付を設定する。
  • マクロ StartLearning の実行時のセル O2 には,セル I2~I53 にあるいずれかの項目のIDが正しく入力されているものとする。
  • マクロ StartLearning では,マクロの実行日を取得するために表1に示す関数を用いる。
    pm13_4.gif
pm13_5.gif
e に関する解答群
  • 表引き(K2~K53,ItemRow,1)='可',表引き(E2~E13,UnitRow,1)=null
  • 表引き(K2~K53,ItemRow,1)='可',表引き(E2~E13,UnitRow,1)≠null
  • 表引き(K2~K53,ItemRow,1)='可',表引き(L2~L53,ItemRow,1)=null
  • 表引き(K2~K53,ItemRow,1)='可',表引き(L2~L53,ItemRow,1)≠null
  • 表引き(K2~K53,ItemRow,1)='不可',表引き(E2~E13,UnitRow,1)=null
  • 表引き(K2~K53,ItemRow,1)='不可',表引き(E2~E13,UnitRow,1)≠null
  • 表引き(K2~K53,ItemRow,1)='不可',表引き(L2~L53,ItemRow,1)=null
  • 表引き(K2~K53,ItemRow,1)='不可',表引き(L2~L53,ItemRow,1)≠null
f に関する解答群
  • 表引き(E2~E13,ItemRow,1)
  • 表引き(F2~F13,ItemRow,1)
  • 表引き(F2~F13,UnitRow,1)
  • 表引き(L2~L53,ItemRow,1)
  • 表引き(L2~L53,UnitRow,1)
  • 表引き(M2~M53,ItemRow,1)
  • 表引き(M2~M53,UnitRow,1)
解答選択欄
  • e:
  • f:
  • e=
  • f=

解説

eについて〕
学習開始日に日付を設定するのは以下の条件をともに満たす場合です。
  1. その項目が学習開始可能である。
  2. その項目の学習開始日が空値である。
マクロの冒頭で ItemRow には対象の項目IDの行位置、UnitRow にはその項目IDが属する単元IDの行位置が格納されています。学習開始可能の判定はK列、学習開始日はL列に格納されているので、ItemRow を使ってそれぞれの値を参照します。条件をプログラム的に表すと、
  1. その項目のK列の値が'可'である。
  2. その項目のL列の値がnullである。
となるので「ウ」の条件式が適切です。

「ア」「イ」は項目ではなく単元の学習開始日を参照しているので誤り、「エ」は学習完了日が設定されているときに真となるので誤り、「オ」~「ク」は学習開始可能が'不可'のときに日付を設定することになるので誤りです。

e=ウ:表引き(K2~K53,ItemRow,1)='可',表引き(L2~L53,ItemRow,1)=null

fについて〕
問題文の「その項目が属する単元の学習開始日が空値ならば,単元の学習開始日にもマクロが実行された日付を設定する。」を実現する部分になります。項目記述部分と同じように「本日()」で設定しても良さそうですが、ここでは保守性などの観点から項目記述部分の学習開始日を参照する式で学習開始日の表示を行っています。

選択肢では表引きのセル範囲として、E列、F列、L列、M列が指定されていますが、項目記述部分で学習開始日が設定される列はL列なので正解の候補は自ずと「エ」「オ」に絞られます。2つの式の違いは ItemRow を使っているか、UnitRow を使っているかという点です。前述のように、項目記述部分の行を指定するには ItemRow を使う必要があるので「エ」が適切な式となります。

f=エ:表引き(L2~L53,ItemRow,1)

Pagetop