未経験・独学で受かる基本情報技術者試験のポイント(プログラミング:表計算)

2021-12-06

IT業界未経験者が基本情報技術者試験を受ける場合、午後試験のアルゴリズム(試験の出題ではデータ構造とアルゴリズム)とプログラミング(同じくソフトウェア開発)が一番の難関になります。

とは言え、配点も大きい(25点)ため捨てるわけにはいきません。

この記事は私がIT業界未経験・独学で基本情報技術者試験を受けた経験(令和元年10月試験)から、プログラミングの問題を解くうえで知っておいた方が便利なポイントを記載しています。

プログラミング言語の選択は?

プログラミングは「C、Python、Java、アセンブラ、表計算」から1問選択になりますが、IT業界未経験で基本情報技術者試験を受ける多くの方は表計算かアセンブラで迷うようです。私自身も、試験3か月前の過去問題で30%程度の解答率だったため、表計算をやめて簡単と言う噂のアセンブラに変えようと迷ったこともあります。

なんですが、アセンブラ(CASLⅡ)全然簡単じゃありませんでした…

理由1:ハードウェアや2進数が苦手

アセンブラの問題を解くにはハードウェアに関する知識と2進数の計算は必須になります。ですが、私はどちらも苦手です。

もちろん午前試験の設問は問題なく解けますが、午前試験より時間配分が苦しくプログラミング自体も苦手で計算ミスも多くなる状態ではアセンブラはとても難しかったです。

理由2:プログラムの意図が分からない

基本情報技術者試験に求められている能力は「上位者の指示のもと与えられた業務を行うことができる」知識と技術のため、プログラミングも指示のもと作成することが大切なのは理解できます。

ですが、IT業界未経験者のためかアセンブラの問題を読んでも「プログラムにさせたい処理」は理解できるものの「このプログラムで何をしたいのか」が全然わかりません。そうでなくとも苦手なプログラミングの上意図が分からない設問で、過去問を見るほど混乱していきました。

エクセルを使う人は表計算1択

IT業界未経験でも業務で表計算ソフト(エクセル)を使っている方は多いです。また、この記事を見ている皆さんの中にも使っている方は多いと思います。

何よりも、苦手な分野の試験に対して少しでも馴染みがあるのは大きなポイントです。

ネットの情報に惑わされず、迷わず表計算だけを勉強していくことが合格への近道です。

表計算ソフトのおさらい

世の中では「エクセル方眼紙」や「神(ネ申)エクセル」と言われる使い方もありますが、情報技術者試験で使う表計算ソフトは集計表に入力されたデータを使って効率的に計算するために使います。

当然、問題に出てくるワークシートも計算しやすいように入力されている事が前提になるため、普段は「エクセル方眼紙」や「神エクセル」使っている方は、表計算ソフト本来の使い方を意識して下さい。

何よりもIT系の試験です、印刷して使うことは頭から取り除いてください

得点のポイント

表計算ソフトの本来の使い方を理解して基本的な入力等が身についた後は、関数・マクロの重要ポイントになります。

本来の使い方に加えて、エクセルで合計や平均を「関数を使って計算できる」練習は必要になります。計算式で無理やり数字を入れる事や、表示される合計を使わずに関数を使ってください。

その上で、以下の得点のポイントを読み進めてください。

*このセクション以降は令和元年10月試験の過去問題(表計算)を例題として説明しています。

1.問題文や表からどんな事を計算をしたいか把握する

例題(設問1)から

  • 前提情報:メロンは等級別に分ける
  • 前提情報:メロンの等級によって単価が変わる
  • 前提情報:等級・重量当たりの単価は「単価表」、メロンの個別情報は「集計表」に記載されている
  • メロンの等級(E列)は形状(C列)、表皮色(D列)で判定される
  • 等級(E列)と重量から「単価表」を使って算出価格(F列)を計算する
  • この時、等級が「並」のメロンは算出価格を計算しない
  • 計算された算出価格を50円単位で切り上げて、販売価格を計算する(G列)

黄色のアンダーラインが設問1に関わる情報になります。ピンクのアンダーラインは設問1に直接は関わりませんが、次の設問2に関わってきます。

必要な情報が整理できれば、そのために必要な計算式も分かりやすくなります。

例題(設問2)から

  • 大箱には等級が「並」のメロンだけを重量(5kg未以上) or 個数(4個)で判定する
  • 大箱には連番を振って管理(A列)する
  • 「重量計算表」では大箱に入れるメロンのID(B列からE列)と合計重量(F列)を管理する
    → メロンの個別情報は「集計表」、単価は「単価表」で管理されている
  • 販売価格(重量計算表:G列)は大箱の重量に等級「並」の単価をかけた算出価格を50円単位で切り上げる関数が入力されている
  • 出荷条件を満たさない大箱に関する情報は表示しない

マクロに関しても、ワークシートの列に対して「どんな情報が入っているか」を把握できれば、苦手であっても解答はしやすくなります。

2.頻出関数を見慣れる(エクセルで使い慣れる)

表計算では関数(ワークシート関数)が絶対に使われるため、よく使われる関数や基本的な関数については見慣れて(使い慣れて)おくと戸惑いが少なくなります。また、練習や勉強の時は試験でも関数の説明を見る事を想定して、参考書だけでなくヘルプ画面や使用例も見る癖をつけておくと試験の際に読み解くスピードが速くなります。

引用は表計算の構文ですが、対応するエクセルの関数も同じ構文のためエクセルで使い慣れておきましょう。

IF(IF)

条件によって処理を分けるため、表計算だけでなくアルゴリズムにも必要になり基本情報技術者試験には必須の関数になります。むしろ、プログラムの基本「逐次処理・条件分岐・繰り返し」の「条件分岐」に必要なため情報処理全般に必須になります。

基本構文:IF(論理式,式1,式2)

論理式の値がtrueのとき式1の値を、falseのとき式2を返す。
例)IF(B3>A4,’北海道’,C4)は、セルのB3の値がセルA4の値より大きいとき文字列"北海道"を、それ以外のときセルC4の値を返す。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf

式1、式2は入力値になる場合もありますし、式1や式2の中にさらにIFが入る場合「IF(B3>A4,’北海道’,IF(B3=A4,’東北’,C4):セルのB3の値がセルA4の値より大きいとき文字列"北海道"を、セルのB3の値がセルA4の値が等しいとき文字列"東北"を、 それ以外のときセルC4の値を返す。」もあります。

論理積・論理和(AND・OR関数)

基本構文(論理積):論理積(論理式1,論理式2,…)

論理式1,論理式2,…の値が全てtrueのとき、trueを返す。それ以外のときfalse返す。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf

論理和の場合は、論理和の通りいずれかの値がtrueのときにtrueが返ります。IFと合わせて条件分岐でよく使われるため、論理積、論理和、排他的論理和など午前試験の勉強も合わせて慣れておくと、ちょっとした判断ミスを防ぎやすくなります。

表引き(INDEX関数)

基本構文:表引き(セル範囲,行の位置,列の位置)

セル範囲の左上端から業と列をそれぞれ1、2、…と数え、セル範囲に含まれる行の位置と列の位置で指定した場所にあるセルの値を返す。
例)表引き(A3:H11,2,5)は、セルE4の値を返す。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf

この関数はセル範囲の位置によって同じ引数(~,2,5)でも返る値が違うため、どのようなデータが必要かを把握してセル範囲を考える事がミスを減らすポイントです。

また、行・列の移動する数値が分かりづらいため、行の移動数と列の移動数を間違えないようにする必要があります。

垂直・水平照合(VLOOKUP・HLOOKUP関数)

基本構文(垂直照合):垂直照合(式,セル範囲,列の位置,検索の指定)

セル範囲の左端列を上から下に走査し、検索の指定によって指定される条件を満たすセルが現れる最初の行を探す。その行に対して、セル範囲の左端列から列を1、2、…と数え、セル範囲に含まれる列の位置で指定した列にあるセルの値を返す。
・検索の指定が0の場合の条件:式の値と位置する値を検索する。
・検索の指定が1の場合の条件:式の値以下の最大値を検索する。このとき、左端列は上から順に昇順に整列されている必要がある。
例)垂直照合(15,A2:E10,5,0)は、セル範囲の左端列をA2、A3、…A10と探す。このとき、セルA6で15を最初に見つけたとすると、左端列Aから数えて5列目の列E中で、セルA6と同じ行にあるE6の値を返す。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2019h31_2/2019r01a_fe_pm_qs.pdf

エクセルでも、VLOOKUPを使いこなせるようになると表計算の幅が大きく広がります。エクセルで練習をする際にも実際の関数を使い慣れて、少しでも試験時間に余裕ができるようにしましょう。

ここではごく一部の関数しか書いていませんが、最低でもこの4種類の使い方に慣れておくことは必要です。また、関数のヘルプ画面も見慣れていれば、知らない関数が出てきた場合も使用例を見て関数の使い方を把握しやすくなります。

3.マクロを作る理由

日常業務で使う表計算ソフトでは、上記の関数を駆使するだけで多くの計算や集計を終わらせることができます。

とは言え、基本情報技術者試験である以上プログラミング(マクロ)は必要になってきますので、どんな処理をさせたいかを理解するためにも、まずはマクロを作る理由を理解します。

上記の参考サイトに詳しい説明を記載してくれていますが、「1.複数のワークシートやファイルのデータを使用する処理」「2.関数よりもマクロの方が煩雑にならない処理」の場合には関数だけで処理せずマクロを作るのが基本になります。

「1.問題文や表からどんな事を計算をしたいか把握する」 設問1からはワークシート:集計表と単価表の複数シートを使っていますが、E列は集計表のデータから判定した結果の入力、F列はE列の結果と単価表を合わせた計算なだけのため、複数シートを使っていても計算自体は単純です。

そのため、関数だけで処理を行う方が早くて分かりやすいです。もしこれを、途中経過のデータも無くG列に販売価格を入力しようと思うとマクロの方が楽になりますが、表計算ソフトを使う場合は一覧も大切になるため、途中経過の等級判定が無くなると表として使いづらくなるため関数の方が最適だと考えられます。

それに対して、設問2では1.並のメロンを判定、2.合計重量 or 個数の判定、3.重量価格の計算を3つのワークシートに跨って一度に計算しようとしています。頑張れば関数だけでも処理できるかもしれませんが、「重量計算表」自体は再利用することもなくマクロも長くならないため、無理やり関数で処理をするよりもマクロを作った方がシンプルになることが理解できます。

情報処理の目的は「いかにシンプルな計算をするか」も含まれるため、可能な限りシンプルな手法を使うことが求められます。そのため、マクロの問題に対しても苦手意識を持たずに読み解いていくことで、処理させたい事自体は難易度が高くない事が理解できるようになります。

例題(設問2)の考え方

1.繰り返しの範囲の把握

図示できないため文章での説明になりますが(記事を読む際はリンクから例題を見て下さい)、繰り返しは相対(集計表!A1, i, 0) ≠ null ~ i ← i + 1までになっています。#a

その後の相対(F1, j, 0) ≠ nullの中にも繰り返しはありますが、k: 0, k ≦ 5, 1から5回だけ繰り返した後は処理が終わっている事がわかります。#b

2.繰り返しで行われている処理を想像する

繰り返しの回数から、重量 or 個数の判定は#aで行われていることが想像できるため、d, eの設問は問題文の重量計算表の行に沿った処理になるとわかります。

そうなると、選択肢も合わせてかんげるとdについてはF列に入れるデータ = 重量単価になるため重量単価を求める計算式を、eについては重量 or 個数の判定を行うことができる計算式を解答することがわかります。

また、fについては並のメロンの梱包が一通り終わった後に5回だけ繰り返し処理を行っていますが、出荷条件を満たさない情報は表示しないという文面から入力した情報を削除している事が想像できます。

順序だてて考えれば何とかなる

簡単な説明でしたが、プログラミングが苦手でも目的:どのような処理(計算)をしたいのかを理解する事と、表計算ソフトで使う関数の知識を持っている事で解答の考えやすさが違ってくる事わかると思います。

もちろん基本的な表計算ソフトの使い方や関数への慣れは必要ですが、業務で使っているソフトなら練習もしやすいですし、何よりも取っつきやすいです。

IT業界未経験で独学であっても、表計算は一般的な知識をもとにプログラミングを理解しやすい分野です。決して合格できない試験ではありません、必ず自分に返ってきますので皆さん頑張って下さい!