roy > naoya > 実用情報 > (8)表計算ソフト[4] 絶対参照と論理関数(1)
(8) 06/5の授業内容:表計算ソフト[4] 絶対参照と論理関数(1)
[1]本日使用するファイルについて
前回の作業が終了していることを前提に作業を進める。それゆえ、本日使用するファイルは作業の進捗状況により、次のように使い分けること
本日のファイル
- 前回の作業が完了している場合:raw_data0529.xlsまたはraw_data.xls
- 完了していない場合や間違いがあるかもしれない場合:新しいファイル(raw_data0605.xls)
raw_data0605.xlsは前回の作業が全て終了した状態のファイルである。
[2]計算過程のデータの整理
前回は、逆転項目への対応や、コンピュータ不安の21項目を3因子に集約するといった作業を行った。これらの計算に使用した元のデータはこれ以降は使用しない。それゆえ、セルの色を変更したり、列の幅を狭くするなどして、使用しないデータだということをわかるようにしておこう。
今後使用しないデータは次の通り。
- 3の逆転前の21項目
- 3の逆転後の21項目
3は因子1、因子2、因子3の3つのみを使用する。2については、メールや表計算などカテゴリごとに合計得点を求めたが、元の44項目も今後使用するのでそのままにしておこう。
列の幅の調整
列幅の調整方法はいろいろあるが、一番簡単な方法を確認する。A列やB列と書かれている列番地の境界線にマウスカーソルを合わせ、クリックしたまま左右に動かすと列幅が調整できる。複数列を選択して列幅変更を行うと、選択した列が全て同じサイズに変更される。
今回は関係ないが、列と列の境界をダブルクリックすると、印刷をしたときに文字や数字が途切れない最適な幅に設定される。
本日の作業1
以下のデータについて、列幅を狭くし(幅は自由に決めてよい)、セルの塗りつぶし色を黒にする。
- 3の逆転前の21項目
- 3の逆転後の21項目
[3]絶対参照とifの復習
相対参照と絶対参照
これまでcountやsumなどいくつかの関数を使用してきた。いずれも最初の1人目のみ関数を用いた式を書いておき、2人目以降はその式を複写することで結果を得てきた。例えば、sum関数では合計を求める範囲を指定する必要があるが、式を複写しても結果が出るということは、複写した際に指定した範囲も自動的に変化してくれているということになる。
このように、式を複写した際に参照するセルが相対的に変化する機能のことを、相対参照と呼ぶ。
相対参照を使うことで、作業が極めて容易になる。同じ計算を100回繰り返す場合、最初の1行目だけ式を書いておけば複写できるためである。しかし、相対参照がうまく使えないケースもある。以下の例を見てみよう。
A | B | C | |
1 | 名前 | 得点 | 50 |
2 | 一郎 | 30 | -20 |
3 | 二郎 | 50 |
ここではA列に名前、B列にテストの点が入力されている。C1には平均点が記載されている。ここでC2以降で平均点との差を求めることにする。C2には「=B2-C1」と入力し、計算結果の-20が表示されているものとする。
では、先ほどと同様にC2をコピーしてC3に複写してみよう。二郎さんは50点をとっており平均点と同じなので0になるはずである。しかし結果は70になる。セルにどのような式が入力されているか調べると「=B3-C2」となっていることが確認できる。
セル参照を用いて式を書いた場合、式を複写すると参照するセルも変化する。1つ下のセルに複写したため参照するセルもそれぞれ1つ下に移動している。これは正しい働きであるが、このケースでは参照するセルが変化すると都合が悪い。より厳密に言うと、B2は1つ下のセルに移動してB3に移動してほしいが、C1は1つ下のC2に移動するとまずいことになる。
式を複写した際に参照するセルを変化させない方法もある。自動的に変化するのが相対参照であるが、固定する方法を絶対参照という。
絶対参照は以下の3種類がある。手前に$をつけることで、つけた部分を固定することができる。
- $C1:列(C)のみ固定する。式を横に複写する場合に有効。
- C$1:行(1)のみ固定する。式を縦に複写する場合に有効。
- $C$1:行列いずれも固定する。式を全く別の場所に複写する場合に有効。
今回は下に複写した際にC1がC2に変更しないようにしたいため、1を固定する必要がある。よってC2に「=B2-C$1」と書き、C3に複写すればよい。
論理関数if
A | B | |
1 | 1 | |
2 | 2 | |
3 | 3 | |
4 | 1 | |
5 | 4 |
上記は4択問題に対する5名の回答であるとする。正解が1の場合、2名が正解で残りの3名は不正解となる。いちいち「正解」「不正解」と入力するのは大変なので、関数を使ってみよう。例えばB1のセルには次のように書けばよい。
もしもA1が1ならば正解と表示する。そうでない場合は不正解と表示する。
これは「A1は1である」という命題に対する真偽の判断となる。真であるならば「正解」を表示し、偽であるならば「不正解」と表示する。真偽判断に用いる関数がifである。if関数の基本構造は以下の通りとなる。
=if(条件式,真の場合,偽の場合)
()内に記載するのは3つである。それぞれの境界はカンマであるが、Calcの場合はカンマではなくセミコロンとなる。今回の場合は次のように書く。真の場合、偽の場合に表示するのは数字ではなく文字であるため""をつけている。
=if(A1=1,"正解","不正解")
Enterを押すと、真偽の判断が行われB1には正解と表示される。
なお、真の場合、偽の場合に表示する値が数字の場合には""は不要である。
=if(A1=1,1,0)
if文の条件式の書き方
- A1が2である:A1=2
- A1とA2が等しい:A1=A2
- A2がB3以上:A2>=B3
- A2が10を超える:A2>10
- A3が20以下:A3<=20
- A3がA5未満:A3<A5
- A4が100:A4=100(数字なので""不要)
- A4がりんご:A4="りんご"(文字なので""必要)
ifの入れ子
A | B | |
1 | 70 | |
2 | 85 | |
3 | 45 | |
4 | 65 | |
5 | 90 |
先ほどの例では「正解」「不正解」の2通りしかなかったが、さらに複雑な場面もある。例えば次のようなケースを考えてみよう。
- 80点以上:A
- 70点以上:B
- 70点未満:C
if関数はある条件式を記述し、それを満たす場合と満たさない場合という2つの選択肢しか記述することができない。このため単純にifを使うだけでは上記の問題を解決できない。このような場合はif関数を入れ子にする。具体的には以下のように書く。
=if(A1>=80,"A",if(A1>=70,"B","C"))
A1が80以上という条件式を満たす場合、Aが表示される。満たさない場合は2つ目のif関数が適用され、2つ目の条件式のA1が70以上であるという条件式を満たすかどうか判定が行われる。満たす場合はBが表示され、満たさない場合はCが表示される。このようにif関数を2つ入れ子にすることで3種類の処理を行うことができる。処理内容が4つある場合はif関数を3つ入れ子にすればよい。
今度は成績評価の基準を変えてみよう。
- 80点以上:A
- 70点以上:B
- 60点未満:C
- 60点未満:D
この場合は、条件1(80点以上である)を満たせば「A」、満たさない場合は条件2(70点以上である)を満たせば「B」、満たさない場合は条件3(60点以上である)を満たせば「C」、満たさなければ「D」になる。3回の条件判断が必要になるので、次のような入れ子構造になる。
=if(A1>=80,"A",if(A1>=70,"B",if(A1>=60, "C", "D")))
いずれの場合も「(」に対する「)」の数を間違えないように注意しよう。
これらについて、練習用ファイルを使いながら、用法を確認してみよう。
[4]セキュリティに関する理解度の得点化
4番は、セキュリティに関する質問項目である。このうち(1)は用語を知っているかどうかをたずねる認知度の項目であるが、(2)は内容を知っているかどうかたずねる理解度に関する項目であった。
(2)は○を「1」、×を「2」と入力しているが、このままでは正解か不正解かわからない。そこで、正解の場合は「1」、不正解の場合は「2」となるよう、数値を変換してみよう。この際に使用するのが論理関数のifと絶対参照である。
本日の作業2
- 4番の(2)の後ろに30列挿入する。その上で見出しに「4-2-1」から「4-2-30」まで連番を振る。
- 下の表を参考に、300行目あたりの邪魔にならない箇所に解答を入力する。
- 各自の入力データと解答を比較し、一致する場合は「1」、一致しない場合は「0」に変換する
- さらに10列追加し、見出しに「ウィルス」「セキュリティホール」「スパム」「フィッシング」「スパイウェア」「ボット」「ファーミング」「ワンクリック」「DoS」「ソーシャル」と入力する。
- 各項目について3問の合計得点を求める。
問1 | 問2 | 問3 | 問4 | 問5 | 問6 | 問7 | 問8 | 問9 | 問10 |
2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 | 1 | 1 |
問11 | 問12 | 問13 | 問14 | 問15 | 問16 | 問17 | 問18 | 問19 | 問20 |
2 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
問21 | 問22 | 問23 | 問24 | 問25 | 問26 | 問27 | 問28 | 問29 | 問30 |
2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 |
[5]出席課題
作業を行ったファイルをを添付ファイルで提出する。
提出要領
- To:課題提出用メールアドレス
- Subject:実用情報(8)