では、実際にExcelシートに関数を埋め込んでいきます。
その前に、実際に埋め込んだ関数が正しいかどうか判断しないといけないので
テストも兼ねて、問題を先に作りました。
とりあえず、テキトーにクイズ問題を作ってみました。
(意外に面倒だったので、9問にしました)
では、関数を埋めていきます。
やることは以下の8つの作業です。
①問題解答用紙の「問題欄」に対応する問題を表示する。
②問題解答用紙の「選択肢欄」に対応する選択肢を表示する。
③問題解答用紙の「解答欄」にドロップダウンリストを作成する。
④問題解答用紙の「正解欄」に解答欄に入力された回答が正解なら「○」
間違いなら「×」を表示する。
⑤問題解答用紙の「正解欄」が「○」なら水色、「×」なら赤の
網掛けをかける。
⑥問題解答用紙の「ワンポイント」に「正解欄」が「○」なら正解用の
ワンポイントを表示し、「×」なら不正解用のワンポイントを表示する。
⑦問題解答用紙の「解答欄」のみを、入力可能とし、ほかのセルは保護する。
⑧問題作成用紙をシートごと非表示にする。
それでは、順番に作業していきます。
①問題解答用紙の「問題欄」に対応する問題を表示する。
問題が入るセル(問題1の場合D9のセル)に対して、同じ問題番号(D9セルの場合「問題1」)
の値を持つ問題文を問題作成シートからVLOOKUP関数で参照する。
参照する値がない場合や、エラーの場合はnull("")を表示する。
※問題を表示するだけなVLOOKUPである必要はないが、問題をまとめて作って
表示する問題を問題作成シートでコントロールしたりできるので今回は
VLOOKUPを使ってみました。
具体的にはこんな式です。
=IFERROR(IF(VLOOKUP($A$9:$A$28,データシート!$A$4:$B$23,2,0)="","",VLOOKUP($A$9:$A$28,データシート!$A$4:$B$23,2,0)),"")
長いので順番に考えます。
まず、肝心のデータを持ってくるところですが、
D9セルにカーソルを合わせ、「関数の挿入」を押します。
VLOOKUPを選択しOKを押します。
(VLOOKUPを使ったことがなければ検索して下さい)
まずは、検索値を入力します。
検索値の右側のボタンを押します。
(どんな名称なのか分かりません。画像で示したボタンです)
このようなWindowが表示されセルを指定するように求められます。
今回、検索したい値は「問題1」なので、この文字列の入力されている
A9セルを指定すればよいのですが、どうせ、この後「問題20」まで
検索しなければならないので、A28までを指定することにします。
※因みに、画像では「A9:C28」となっていますが、これは結合された
セルをドラックで選択したためです。
直接入力するなら「A9:A28」と入力すればOKですし、ドラックで
選択した後に、CをAに変えても同じです。
セルが選択できたら、今度は以下のWindowの右のボタンを押します。
関数の引数Windowに戻り、今選択した値が入力されています。
※しつこいようですが、ここで値を直接入力しても同じことです。
続いて「TAB」キーを押すと、カーソルが「範囲」に移ります。
(マウスで移動しても同じです)
同様に、右のボタンを押して、範囲選択を行います。
関数の引数Windowが開きますが、今回は選択範囲が別シートに
なりますので、問題作成用紙(画面ではデータシートと表記)に
遷移します。
今回、検索範囲として選択したい場所は「問題文」の列になります。
検索には「問題1、問題2・・・」といった問題番号の値を使いますので
この両者が格納されているA4~B23までの範囲を選択します。
選択が完了すると、関数の引数Windowにはシート名と選択範囲が表示
されますので、先程と同様に右のボタンを押します。
画面が戻りますので、次の入力項目「列番号」にTABキー等で遷移します。
ここで入力する値ですが、このセル(D9セル)に表示したい値は、
問題作成用紙の「問題文」になりますが、この問題文は先程選択した範囲
(A4:B23)の2列目に該当しますので、ここには「2」を入力します。
最後に検索方法ですが、ここは気にせず「0」(絶対参照)を入力してください。
その後OKを押すと、セルD9に問題作成用紙の「問題1」欄にある問題文を
コピーするVLOOKUPの式が出来ます。
出来た式は
「=VLOOKUP(A9:A28,データシート!A4:B23,2,0)」
となります。
さて、ここまででは、D9セルに「問題1」という値を持つ「問題文」をデータシートから
コピーしてくる式が出来ましたが、このままでは、エラー発生時や、参照する値がない場合等
は、不要な情報が表示されてしまいます。
そこで、もう少し式を修正して、これらの場合にはNull(なにも表示しない)ようにします。
具体的にどうなるかというと、
まず、下図のように、問題1の問題文が空白の場合。
この場合は、検索する文字列「問題1」はデータとして存在するが
表示したい「問題文」がNullという場合に数のように「0」と表示されてしまう。
もう一つのパターンは下図のように、検索したい「問題1」が
データシートに存在しない場合、以下のように
「#N/A」というエラーが表示される。
これらの表示はいずれも望んでいる表示ではなく、特に「0」表示については
問題が20問以下の場合、普通に発生することから、これらの場合は
Nullを表示するようにする。
方法としては基本的にIF関数を使う事で回避する。
IF文の基本的な考え方は
「もし」(「条件」,「真の場合」,「偽の場合」)
といった構文になるので、最初のパターンの場合には。
条件:VLOOKUP関数で参照した値がNull
真の場合:Nullをセット
偽の場合:VLOOKUP関数で参照した値をセット
とすることで、参照値(問題文)がNullの場合はNullをセットし、値(問題文)が存在した
場合は問題文をセットすることができる。
上の条件をIF文の文法に当てはめると。
IF(VLOOKUP(A9:A28,データシート!A4:B23,2,0)="","",VLOOKUP(A9:A28,データシート!A4:B23,2,0)
となります。
ここまでで、参照したい値がNullの場合は、きちんとNullを表示してくれます。
続いて、式にエラーがあった場合にNullを返すには、IF文と同じように「IFERRER」関数を
使います。
使い方は、IF関数と同じなので割愛しますが、同様に、この関数を組み込んだとき
以下の式が完成します。
IFERROR(IF(VLOOKUP($A$9:$A$28,データシート!$A$4:$B$23,2,0)="","",VLOOKUP($A$9:$A$28,データシート!$A$4:$B$23,2,0)),"")
ここまでで、上記式の「$」以外は全て説明しました。
$はこの式をコピーする時に値が変化しないようについていますが、説明は省きます。
おまじないだと思って真似して下さい。








