基本情報技術者 2013年 春期 午後 問13
次の表計算、ワークシート及びマクロの説明を読んで、設問1〜3に答えよ。
〔表計算の説明〕
A社は、製品コードPA1、PA2、PA3、AS1の4種類の製品の生産計画を立案するために、三つのワークシート“部品一覧”、“受注一覧”、“生産管理”を作成することにした。各製品の生産計画の概要は次のとおりである。
(1) 各製品の生産に必要な部品とその個数は、図1のワークシート“部品一覧”のとおりであり、製品AS1の生産には、製品PA1、PA2、PA3を部品として用いる。各部品は、生産着手時に投入され、着手した製品は全てその日のうちに完成する。
(2) PA1、PA2、PA3は、1日の生産基準数をあらかじめ設定しておき、これに翌日生産分のAS1の部品として必要な個数を加えた値を生産数とする。
(3) 生産基準数は、1週間ごとに決定する。
(4) 生産基準数は、これを決定する週と翌週の2週間分の納品予定に基づき、納品予定日の前日までに納品数を用意するとともに、一定の余裕をもった在庫数を確保するように決定する。
(5) PA1、PA2、PA3は、10個単位で生産する。各製品の1日の生産数の上限は、図1のワークシート“部品一覧”の最大生産数のとおりである。
(6) AS1は、20個単位で生産する。AS1は、受注生産品であり、納品予定日の前日に、翌日の納品に必要な最低限の個数を20個単位で生産する。ただし、1日の最大生産数を超える受注は受け付けない。
(7) ワークシートの日付は、yyyy-mm-ddの形式で表示する。表計算ソフトの内部では、1970年1月1日を1とした経過日数を整数で保持している。
〔ワークシート:部品一覧〕
ワークシート“部品一覧”には、各製品を生産するために必要な部品の個数と、1日に生産可能な最大生産数を、図1のように格納してある。

〔ワークシート:受注一覧〕
ワークシート“受注一覧”には、受注データのデータベースから、生産基準数を決定する週及びその翌週に納品予定日を迎えるデータを抽出し、受注日順に格納した後、作業コードを付与する。ワークシート“受注一覧”の例を、図2に示す。

(1) 抽出した2週間分のデータの件数は、最大でも100件を超えないものとする。
(2) セルF2には次の式を入力し、セルF3〜F101に複写する。
結合(E2,C2)
〔ワークシート:生産管理〕
ワークシート“生産管理”は、ワークシート“受注一覧”から各製品の納品数を納品予定日ごとに集計する。また、各製品の生産基準数の設定値を変えることによって、在庫や欠品状況などの生産管理に必要な情報のシミュレーションができる。ワークシート“生産管理”の例を、図3に示す。

設問1:
問題文を見る ワークシート“生産管理”に関する次の記述中のに入れる正しい答えを、解答群の中から選べ。
(1) セルB1には、生産管理の開始日を、セルE1には、開始日から数えて14日目の日付を表示する式を入力し、この間を生産管理期間とする。また、セルA6〜A19には、生産管理期間中の一連の日付を表示する式を入力する。
(2) セルB3、F3、J3、N3には、製品コードを入力する。
(3) セルE5、I5、M5、P5には、各製品の前週末の実際の在庫数を入力する。
(4) セルE22、I22、M22には、製品PA1、PA2、PA3の生産基準数を、最大生産数を超えない範囲で入力する。
(5) セルN6には、納品予定日がセルA6の日付の製品AS1の納品数を求める式を入力し、セルN7〜N19に複写する。
(6) セルB6には、納品予定日がセルA6の日付であり、製品コードがセルB3のコードである製品の納品数を求める次の式を入力し、セルB7〜B19、セルF6〜F19、セルJ6〜J19に複写する。
a + $O6 * 水平照合(B$3,部品一覧!$F$1〜$H$5,5,0)
(7) 列D、列H、列Lの生産数欄には、製品PA1、PA2、PA3の1日の生産基準数E22、I22、M22に、翌日生産する製品AS1の部品として必要な個数を加えた値を求める式を入力する。ただし、行19の生産数欄は、1日の生産基準数だけが設定されるようにする。
(8) 列C、列G、列Kの納品後在庫欄には、前日の生産後在庫から当日の納品数を減じた値を求める式を入力する。また、列E、列I、列Mの生産後在庫欄には、当日の納品後在庫に生産数を加えた値を求める式を入力する。
(9) セルO6には、製品AS1の当日の在庫数が翌日の納品数を満たすために最低限必要な生産数を求める次の式を入力し、セルO7〜O19に複写する。
IF(b)
(10) 列Pの在庫数欄には、前日の在庫数から当日の納品数を減じ、当日の生産数を加えた値を求める式を入力する。
(11) セルB20、D20、F20、H20、J20、L20の合計欄には、各列の合計、セルB21〜M21の平均欄には、各列の平均を求める式を入力する。
(12) セルE23、I23、M23の欠品日数には、各製品において納品後在庫がマイナスになった日数を求める式を入力する。
(13) セルE24には、セルB3の製品の生産基準数の設定値が、生産管理期間において次の条件を全て満たすときにtrue、そうでないときにfalseを表示する式cを入力し、セルI24、M24に複写する。
〔条件〕
① 欠品日数が0であること
② 余裕をもった在庫数を、セルB21で求めた納品数平均の80%の値としたとき、毎日の生産後在庫のうちで、その値に満たない日が1日もないこと
aに関する解答群
ア:条件付合計(受注一覧!$D$2〜$D$101,= B$3,受注一覧!$C$2〜$C$101)
イ:条件付合計(受注一覧!$D$2〜$D$101,= 結合($A6,B$3),受注一覧!$F$2〜$F$101)
ウ:条件付合計(受注一覧!$D$2〜$D$101,= 結合(B$3,$A6),受注一覧!$F$2〜$F$101)
エ:条件付合計(受注一覧!$E$2〜$E$101,= $A6,受注一覧!$D$2〜$D$101)
オ:条件付合計(受注一覧!$F$2〜$F$101,= 結合($A6,B$3),受注一覧!$D$2〜$D$101)
カ:条件付合計(受注一覧!$F$2〜$F$101,= 結合(B$3,$A6),受注一覧!$D$2〜$D$101)
bに関する解答群
ア:P5 − N6 < N7,0,切上げ((N7 + N6 − P5) / 20,0) * 20
イ:P5 − N6 < N7,0,整数部((N7 + N6 − P5) / 20) * 20
ウ:P5 − N6 < N7,切上げ(N7 + N6 − P5,−1),0
エ:P5 − N6 ≧ N7,0,切上げ((N7 + N6 − P5) / 20,0) * 20
オ:P5 − N6 ≧ N7,0,整数部((N7 + N6 − P5) / 20) * 20
カ:P5 − N6 ≧ N7,切上げ(N7 + N6 − P5,−1),0
cに関する解答群
ア:論理積(E23 = 0,条件付個数(E6〜E19,> B21 * 0.8) = 0)
イ:論理積(E23 = 0,条件付個数(E6〜E19,< B21 * 0.8) = 0)
ウ:論理積(E23 > 0,条件付個数(E6〜E19,> B21 * 0.8) = 0)
エ:論理和(E23 = 0,条件付個数(E6〜E19,< B21 * 0.8) = 0)
オ:論理和(E23 > 0,条件付個数(E6〜E19,< B21 * 0.8) = 0)
カ:論理和(E23 > 0,条件付個数(E6〜E19,> B21 * 0.8) = 0)
模範解答
a:オ、b:エ、c:イ
解説
解答の導き方
この設問では、受注一覧から納品数を集計する方法、AS1の生産数の決め方、生産基準数が適切かどうかの判定方法を考えます。
a:納品数とAS1の部品需要を求める
まず、受注一覧の作業コードに注目します。セルF2には「結合(E2,C2)」を入力するので、納品予定日と製品コードをつなげた値が作業コードになります。日付は表示上は「2013-04-02」のような形式ですが、表計算ソフトの内部では経過日数として保持されます。そのため、例にある作業コード「15798PA1」のように、日付の値と製品コードが連結されます。
セルB6では、納品予定日がセルA6の日付で、製品コードがセルB3の製品である受注を探します。そこで、条件を調べる範囲には作業コードの列である受注一覧のF列を使い、条件にはセルA6の日付とセルB3の製品コードをこの順につないだ値を使います。さらに、見つかった受注の数量を合計するので、合計対象は受注一覧のD列です。
この条件と合計対象に合うのは、aの解答群のオです。
式には、さらにセルO6の値に、水平照合の結果を掛けています。水平照合は、表の横方向に見出しを探し、指定した行の値を取り出す関数です。部品一覧のF列からH列にはPA1、PA2、PA3が並び、5行目にはAS1を生産するために必要な各製品の個数があります。そのため、セルB3の製品コードに対応する個数を取り出して、AS1の生産数に掛ければ、AS1の生産に使う部品数を求められます。
たとえば図3の「2013-04-02」では、PA1の受注分「630」に、AS1の生産数「40」とPA1の必要個数「1」を掛けた「40」を加えて、PA1の需要を「670」とします。受注分だけでなく、AS1の部品として使う分も在庫から出ていくためです。
b:AS1を生産する数を求める
セルO6では、当日の納品を差し引いたAS1の在庫で、翌日の納品数をまかなえるかを判定します。
当日の納品後に残る在庫は、前日の在庫数セルP5から当日の納品数セルN6を引いた値です。これが翌日の納品数セルN7以上なら、翌日の納品に足りるので、生産数は0です。
足りない場合は、必要な生産数を次のように求めます。
- 翌日の納品数から、当日の納品後に残る在庫を引く
- AS1は「20個単位で生産する」ので、不足分を20個単位に切り上げる
不足分は、式で表すと「N7 + N6 − P5」です。したがって、不足分があるときは「切上げ((N7 + N6 − P5) / 20,0) * 20」で生産数を求めます。
この判定と計算を行うのは、bの解答群のエです。IFの条件が真なら生産数を0とし、偽なら不足分を20個単位に切り上げます。
例として、図3の「2013-04-02」では、前日の在庫「8」から当日の納品数「0」を引いた在庫は「8」です。翌日の納品数は「36」なので、不足は「36 − 8 = 28」です。28個では生産できないため、20個単位に切り上げて40個を生産します。
c:生産基準数が妥当かを判定する
設問では、次の二つの条件を両方満たしたときにtrueを表示します。
- 欠品日数が0であること
- 毎日の生産後在庫が、納品数平均の80%を下回らないこと
二つの条件を両方満たす必要があるため、論理和ではなく論理積を使います。また、二つ目の条件は「下回る日が1日もない」という意味です。そこで、セルE6〜E19のうち、セルB21の80%より小さい値の個数が0であることを調べます。
この条件に合うのは、cの解答群のイです。条件付個数で「< B21 * 0.8」に当てはまる数を数え、その個数が0なら、基準を下回る日がありません。
たとえばPA1では、セルB21の値が359なので、余裕をもった在庫数の基準は359 × 0.8 = 287.2です。図3のPA1の生産後在庫は、毎日この値以上で、欠品日数も0です。したがって、PA1の生産基準数については二つの条件を満たします。
誤りやすいポイント
- 作業コードの検索条件は、日付だけでも製品コードだけでもありません。日付と製品コードをつないだ値で照合します。
- 条件付合計では、条件を調べる範囲と、合計する範囲を区別します。条件は作業コードの列、合計対象は数量の列です。
- AS1の生産数は、現在の在庫だけでなく、当日の納品数と翌日の納品数を使って決めます。
- AS1は20個単位なので、不足分をそのまま生産数にするのではなく、20個単位に切り上げます。切り捨てると、翌日の納品数に足りない場合があります。
- cの二つ目の条件は、「基準以上の日がある」ことではなく、「基準を下回る日が1日もない」ことです。そのため、基準を下回る値の個数を数えて0かどうかを判定します。
FAQ
Q: PA1などの納品数に、AS1の部品として使う数も加えるのはなぜですか?
A: PA1などの在庫は、顧客への納品だけでなく、AS1を生産するときにも使われるからです。在庫から出ていく数を管理するため、両方を合わせて数えます。
A: PA1などの在庫は、顧客への納品だけでなく、AS1を生産するときにも使われるからです。在庫から出ていく数を管理するため、両方を合わせて数えます。
Q: AS1の生産数を求めるとき、なぜ翌日の納品数を使うのですか?
A: 当日に生産したAS1を翌日の納品に使うためです。当日の納品後に残る在庫と、翌日に必要な数を比べます。
A: 当日に生産したAS1を翌日の納品に使うためです。当日の納品後に残る在庫と、翌日に必要な数を比べます。
Q: 80%と同じ在庫数の日は条件を満たしますか?
A: はい。条件は「80%の値に満たない日がない」ことです。80%と同じ値は下回っていないため、条件を満たします。
A: はい。条件は「80%の値に満たない日がない」ことです。80%と同じ値は下回っていないため、条件を満たします。
関連キーワード: 条件付合計、文字列連結、水平照合、切上げ、在庫管理、論理積
設問2:
問題文を見る ワークシート“生産管理”において、セルE24、I24、M24の値がtrueとなる最小の生産基準数を、セルE22、I22、M22に求めるマクロProduct_simを作成し、ワークシート“生産管理”に格納した。マクロProduct_sim中のに入れる正しい答えを、解答群の中から選べ。
〔マクロの説明〕
(1) 製品PA1の生産基準数を求めるために、セルE22の値を0から生産単位ずつ増加させる処理を、セルE24の値がtrueになるまで繰り返す。ここで、もし生産基準数がワークシート“部品一覧”で示した各製品の最大生産数を超えても、セルE24の条件が成立しない場合は、セルE22に−99を代入して、PA1の生産基準数を求める繰返し処理を終了する。
(2) 製品PA2、PA3の生産基準数を求めるために、(1)でセルE22に対して行った処理と同様の処理を、セルI22、セルM22でも実行する。

d, fに関する解答群
ア:相対(A22, 0, i) < 相対(部品一覧!I1, i * 4, 0)
イ:相対(A22, 0, i) > 相対(部品一覧!I1, i * 4, 0)
ウ:相対(A22, 0, i * 4) < 相対(部品一覧!I1, i, 0)
エ:相対(A22, 0, i * 4) > 相対(部品一覧!I1, i, 0)
オ:論理積(相対(A24, 0, i * 4) = false, sw = 0)
カ:論理積(相対(E24, 0, i) = false, sw = 1)
キ:論理和(相対(A24, 0, i * 4) = false, sw = 0)
ク:論理和(相対(E24, 0, i) = false, sw = 1)
eに関する解答群
ア:i ← i + 1
イ:i ← i + 4
ウ:相対(A22, 0, 4) ← 0
エ:相対(A22, 0, i * 4) ← 0
オ:相対(A22, 0, i * 4) ← 相対(A22, 0, i * 4) + 1
カ:相対(A22, 0, i * 4) ← 相対(A22, 0, i * 4) + 10
キ:相対(E22, 0, i) ← 相対(E22, 0, i) + 1
ク:相対(E22, 0, i) ← 相対(E22, 0, i) + 10
模範解答
d:オ、e:カ、f:エ
解説
解答の導き方
このマクロは、PA1、PA2、PA3の生産基準数を小さい値から試し、条件を満たす最小の値を探します。問題文には「10個単位で生産する」とあるため、生産基準数は10ずつ増やす必要があります。
まず、変数iの値によって、どの製品の生産基準数を調べるかが決まります。相対参照(基準セルからの行や列のずれで参照先を決める方法)を使っているため、参照先は次のように移ります。
たとえば、相対(A22, 0, i * 4)は、iが1ならE22、2ならI22、3ならM22を指します。また、相対(部品一覧!I1, i, 0)は、iが1なら部品一覧!I2を指します。図1の最大生産数は、PA1が500、PA2が600、PA3が400です。
dは、繰返しを続ける条件です。
生産基準数を探し続けるのは、「生産基準数の妥当性を示すセルがfalseで、かつ、最大生産数を超えたことを示す印がまだ付いていない」間です。swは処理の状態を示す目印(フラグ)で、最初に0に設定されています。
生産基準数を探し続けるのは、「生産基準数の妥当性を示すセルがfalseで、かつ、最大生産数を超えたことを示す印がまだ付いていない」間です。swは処理の状態を示す目印(フラグ)で、最初に0に設定されています。
そのため、dには「妥当性がfalse」と「swが0」の両方が成り立つ条件を指定します。論理積は、複数の条件がすべて成り立つときにtrueになる条件です。したがって、dはオです。
eは、生産基準数を次の候補へ進める処理です。
問題文では、PA1、PA2、PA3を10個単位で生産するとしています。そこで、調べている生産基準数に10を加えます。よって、eはカです。
問題文では、PA1、PA2、PA3を10個単位で生産するとしています。そこで、調べている生産基準数に10を加えます。よって、eはカです。
fは、最大生産数を超えたかどうかを判定する条件です。
生産基準数が最大生産数を超えた場合は、繰返し部分でswを1にし、生産基準数に−99を代入します。最大生産数と同じ値ならまだ超えていないため、判定は「最大生産数より大きい」とします。よって、fはエです。
生産基準数が最大生産数を超えた場合は、繰返し部分でswを1にし、生産基準数に−99を代入します。最大生産数と同じ値ならまだ超えていないため、判定は「最大生産数より大きい」とします。よって、fはエです。
たとえばPA1の場合、E22は0から10ずつ増えます。500は最大生産数と同じなので、上限超過にはなりません。500でもE24がfalseのままなら、次の候補は510となり、最大生産数の500を超えます。このときswが1になり、E22に−99が設定されて、通常の探索が終わります。一方、最大生産数を超える前にE24がtrueになれば、その時点で探索を終えます。小さい候補から順に試しているため、最初にtrueとなった値が最小の生産基準数です。
誤りやすいポイント
- 生産基準数を1ずつ増やすのではありません。問題文の「10個単位で生産する」に合わせて、10ずつ増やします。
- 上限の判定は「最大生産数以上」ではなく「最大生産数より大きい」です。最大生産数と同じ値は、上限を超えていません。
- dは、妥当性がfalseであることだけではなく、swが0であることも必要です。最大生産数を超えてswが1になった後、探索を続けないようにするためです。
- 製品ごとのセルは、iによってE列、I列、M列へ移ります。固定のセルだけを見てしまうと、PA2やPA3の判定を正しく行えません。
FAQ
Q: swは何のために使いますか?
A: 最大生産数を超えたことを記録するためです。swを1にすることで、dの繰返し条件が成り立たなくなり、探索を終了できます。
A: 最大生産数を超えたことを記録するためです。swを1にすることで、dの繰返し条件が成り立たなくなり、探索を終了できます。
Q: 最大生産数と同じ値で探索を終了しないのはなぜですか?
A: 問題文の条件は「最大生産数を超えても」です。最大生産数と同じ値は超過ではないため、その値で妥当性を確認します。
A: 問題文の条件は「最大生産数を超えても」です。最大生産数と同じ値は超過ではないため、その値で妥当性を確認します。
Q: AS1の生産単位である20個は、eに関係しますか?
A: この処理で求めるのはPA1、PA2、PA3の生産基準数です。これらは10個単位なので、eでは10を加えます。
A: この処理で求めるのはPA1、PA2、PA3の生産基準数です。これらは10個単位なので、eでは10を加えます。
関連キーワード: 相対参照、論理積、条件判定、反復処理、フラグ、上限チェック
設問3:
問題文を見る A社では、部品の仕入計画を立案するために、ワークシート“生産管理”でマクロProduct_simを実行して求めた生産数を基に、1週間の生産に必要な部品数を求めるワークシート“部品需要”を図4の例のように作成した。ワークシート“部品需要”に関する次の記述中のに入れる正しい答えを、解答群の中から選べ。
なお、記述中の網掛け部分には、同じ式が入るが、表示していない。
〔ワークシート:部品需要〕
(1) セルA2には、部品の需要数を求める期間の開始日を入力する。
(2) 部品需要表の列Aの日付は、セルA2の日付を初日とした1週間分とし、日付ごとの列Bに製品PA1、PA2、PA3の欄を用意する。
(3) セルC5には、必要な部品数を求める式を入力する。ここで、ワークシート“生産管理”から当該日(セルA5の日付)の当該製品(セルB5の製品コード)の生産数を参照する式は、垂直照合($A5,生産管理!$A$6〜$M$19,g,0)である。
また、ワークシート“部品一覧”から当該製品を1個生産するために必要な当該部品(セルC4の部品名)の数を参照する式は、(網掛け部分)である。そこで、セルC5には、次の式を入力し、セルC5〜F25に複写する。
垂直照合($A5,生産管理!$A$6〜$M$19,g,0) * (網掛け部分)
(4) セルC26〜F26には、各列の部品の1週間の必要数合計を求める式を入力する。

gに関する解答群
ア:照合一致($B5,生産管理!$A$3〜$M$3,0)
イ:照合一致($B5,生産管理!$B$3〜$J$3,0) + 3
ウ:照合一致($B5,部品一覧!$A$1〜$A$4,0) * 4
エ:照合検索($B5,$B$5〜$B$7,生産管理!$B$3〜$J$3)
オ:照合検索($B5,生産管理!$A$3〜$M$3,生産管理!$A6〜$M6)
カ:水平照合($B5,生産管理!$B$3〜$J$3,1,0)
キ:水平照合($B5,生産管理!$A$3〜$M$19,4,0)
模範解答
g:イ
解説
解答の導き方
この式で求めたいのは、指定した日付・製品の「生産数」です。そのため、垂直照合の第3引数には、生産数が書かれている列の番号を指定する必要があります。
-
日付から、対象日の行を探します。
式の最初の部分は、セルA5の日付を生産管理のA列から探します。第4引数の0は、日付が完全に一致する行を探す指定です。例えば、セルA5が2013-04-01なら、図3の行6が対象になります。 -
製品コードから、生産数の列番号を決めます。
図3では、PA1の欄がB列からE列、PA2の欄がF列からI列、PA3の欄がJ列からM列にあります。それぞれの生産数は、PA1がD列、PA2がH列、PA3がL列です。一方、照合一致で調べる範囲は、生産管理のB3からJ3です。この範囲の中で製品コードが見つかる位置と、生産数がある列番号は次のように対応します。垂直照合の範囲はA列から始まるので、列番号はA列を1として数えます。照合一致が返す位置はB列から始まる範囲で数えた位置です。そのため、照合一致の結果に3を加えると、生産数の列番号になります。 -
この位置関係に合う式を選びます。
「照合一致($B5,生産管理!$B$3〜$J$3,0)」は、セルB5の製品コードが範囲内の何番目にあるかを返します。そこに3を加える式は、製品に対応する生産数の列番号を返すので、選択肢イが適切です。例えば、2013-04-01のPA1なら、日付から行6が選ばれます。PA1はB3〜J3の1番目にあるため、列番号は1+3=4です。垂直照合は範囲A6〜M19の4列目、つまりD列の値を返します。図3では、D6の生産数は380です。この値に当該部品の必要数を掛けることで、部品需要数を求められます。
誤りやすいポイント
-
照合一致が返すのは、製品コードそのものではなく、範囲内での位置です。
この位置を、垂直照合で使う列番号に変換する必要があります。 -
列番号は、垂直照合の範囲の先頭列を基準にします。
生産数がD列にあるからといって、Dという列名をそのまま指定するのではありません。A列から数えた列番号の4を指定します。 -
製品ごとの納品数や在庫数ではなく、生産数の列を選びます。
図3では、PA1の生産数はD列です。PA1の欄の先頭であるB列を選ぶと、納品数を参照してしまいます。
FAQ
Q: なぜ照合一致の結果に3を加えるのですか?
A: 照合一致はB3〜J3の中での位置を返しますが、垂直照合の列番号はA列から数えます。製品ごとの生産数の列番号に合わせるため、照合一致の結果に3を加えます。
A: 照合一致はB3〜J3の中での位置を返しますが、垂直照合の列番号はA列から数えます。製品ごとの生産数の列番号に合わせるため、照合一致の結果に3を加えます。
Q: 第4引数の0は何を指定していますか?
A: 日付や製品コードを近い値ではなく、完全に一致する値として探す指定です。
A: 日付や製品コードを近い値ではなく、完全に一致する値として探す指定です。
Q: 部品需要数は、生産数だけで決まりますか?
A: いいえ。対象製品の生産数に、その製品1個を作るために必要な部品数を掛けます。
A: いいえ。対象製品の生産数に、その製品1個を作るために必要な部品数を掛けます。
関連キーワード: 垂直照合、照合一致、完全一致検索、列番号、セル参照



