#freeze RIGHT:[[授業のページへ戻る>Lecture/InfoPrac2003]] *情報処理演習 第7回 -今回のテーマ「計算式と関数」「相対参照と絶対参照」 --関数を探して、計算式をつくれるようになる --相対参照と絶対参照の2つのセルの参照の使い分けをマスターする --関数のネスト(入れ子:関数の引数に関数を使う)をマスターする **前回までの課題の提出 [[こちらの連絡事項>../Info]]を見て、前回課題の提出状況を確認してください。 -まだ提出していない人は、課題を作成して提出してください。 -再提出するように指示があった人は、[マイドキュメント]にあるファイルの修正をして、提出用フォルダに再提出してください。 **今回のファイル 今回は、 あるクラスの成績表を作成します(学生の名前には阪神タイガースの選手名をお借りしました)。 「出席点」「課題点」「期末テストの点」の3つの評価から、 いくつかの関数を使って、成績を集計・判定します。 &ref(1112.xls,ここ);をクリックして、データファイルを[マイドキュメント]に保存してください。保存できたら、ファイルを開いてください。 なお、各評価の点数は、乱数機能を使って作っているので、ひとり一人数字が違います。また、何か操作をすると、数字が変わりますが、実習と課題には影響ありません。 **計算式と関数 ***計算式 ''「計算式」''とは、数字やセルの値を使って計算や処理をするものです。四則演算(加減乗除)のような計算だけではなく、関数を使った複雑な処理を記述できます。 書き方のルールは簡単です。''最初に「=」を入力すると計算式''となります。たとえば、A1セルに入力されている円の半径を使って、円周や円の面積を計算するには、次のような数式になります(3.14は円周率)。 =2*A1*3.14 (円周) =A1*A1*3.14 または A1^2*3.14 (円の面積) 計算式に使える演算子は次のとおりです。括弧()を使うこともできます。 |CENTER:計算|CENTER:演算子|CENTER:計算の例|CENTER:結果|h |足し算|CENTER:+|=1+2|3| |引き算|CENTER:-|=3-4|-1| |かけ算|CENTER:*|=5*6|30| |わり算|CENTER:/|=14/7|2| |べき乗|CENTER:^|=8^2|64| |パーセンテージ|CENTER:%|=9/90%|10| ***関数 ''「関数」''とは、数学ででてくる関数と同じ意味で、 「数字や文字など『値』を与えると、いろいろな『処理』をして、新しい値を『結果』として返す」ような仕掛けのことです。たとえば、自動販売機の仕掛けも関数に例えることができます。自動販売機という「関数」に、お金と選択した商品ボタン「値」を処理させると、ジュースやコーヒーという「結果」が返ってきます。 お金・商品ボタン(値)−<与える>→自動販売機(関数)−<返す>→コーヒー(結果) 関数の場合は、数字や文字のデータだけでなく他のセルの番地を、''引数''として関数に与えると、結果が返ってきます。 引数(数字や文字、他のセルの番地)−<与える>→(関数)−<返す>→(結果) 具体的は、次のような計算式を入力します。引数の数は、関数によって変わります。 =関数名(引数1, 引数2, 引数3, ...) ***関数のネスト(入れ子) セルに入力できる計算式は1つだけです。しかし、いくつかの関数を組み合わせたい場合があります。そのようなときには、ある関数の引数として別の関数を使う、関数のネスト(入れ子)をします。 たとえば、関数Aの2番目の引数に関数Bを使う場合は、次のような計算式を入力します。 =関数A(引数A-1, 関数B(引数B-1, 引数B-2, ...)) **成績表の作成(基本的な関数の利用) あるクラスの成績表を作成します。 「出席点」「課題点」「期末テストの点」の3つの評価から、 いくつかの関数を使って、成績を集計・判定します。 ***番号の入力 まず、表の最初に新しい列を1列挿入します。 +A列の列番号をクリックし、A列全体を範囲指定する +メニューバーから「挿入」→「列」を選択する +列を挿入できたら、A1セルに「番号」と入力する 次に、A列に連番の番号を入力します。連番を入力するには、「''オートフィル''」を使います。1〜50版までの番号を入力します。 +A2セルに「2」、A3セルに「3」と入力する +A2セルに「1」、A3セルに「2」と入力する +マウスをドラッグして、A2〜A3セルを範囲指定する +範囲指定した枠の右下の四角形(''フィルハンドル'')をマウスでA51セルまでドラッグする #ref(excel00.png,nolink) ***個人成績の合計 個人の成績の合計を計算しましょう。 まず、F1セルに「合計」と入力してください。 次に、合計を求める計算式を入力します。 出席点と課題点と期末テストの点を足したものが合計になります。 ここでは、関数''SUM''を使います。 -SUM(合計を計算する) --書式 : SUM(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :合計を計算するセルの範囲や数字 今までは''オートSUM''機能を使っていましたが、今回からは他の関数と同じように操作することにします。 関数を利用するには、次のように操作します。 +F2セルをクリックします。 +「関数の挿入」ボタンをクリックします。 #ref(excel01.png,nolink) +利用する関数を選びます。~ 利用したい関数の分類を選んだあと、関数名を選びます。「関数の分類」から「''数学/三角''」を選び、「関数名」から「''SUM''」を選びます。「OK」ボタンをクリックします。 #ref(excel03.png,nolink) +次に、関数に与える引数を設定します。ここでは出席点、課題点、期末テストの点のセルを指定します。 ++「数値1」の入力欄の中を削除します。 ++C2〜E2のセルをマウスをドラッグして範囲指定します。 ++「数値1」に「C2:E2」と設定されているのを確認できたら、「OK」ボタンをクリックします。 #ref(excel04.png,nolink) +F2セルに「=SUM(C2:E2)」という計算式が設定されます。 #ref(excel05.png,nolink) ***相対参照 次に、F2セルに入力した計算式をF3〜F51セルにコピーします。 +F2セルをクリックして、アクティブにします。 +F2セルの枠の右下の四角形(フィルハンドル)をマウスでF51セルまでドラッグします。 +F3〜F51セルに計算式がコピーされます。 #ref(excel05.png,nolink) ここで、F3セルにコピーされた計算式を見てみましょう。「=SUM(C3:E3)」となっていて、コピー元の「=SUM(C2:E2)」という計算式とは異なっています。これはどういうことでしょうか? #ref(excel07.png,nolink) F2セルの計算式の意味は、次のような意味になります。 >「計算式のあるセル(F2)から''3つ左のセル''(C2)から、計算式のあるセル(F2)から''1つ左のセル''(E2)までの''合計を計算''する」 つまり、計算式のあるセル自身を基準にしたセルの位置(相対的な位置)の情報を使って計算しています。したがって、F2セルの計算式をコピーしたF3セルでは、次のような意味になります。 >「計算式のあるセル(F3)から''3つ左のセル''(C3)から、計算式のあるセル(F3)から''1つ左のセル''(E2)までの''合計を計算''する」 このような、自分自身のセルを基点としたセルの位置情報をつかい、コピーすると参照するセルが変わるような、 相対的なセルの参照のしかたを''「相対参照」''といいます。 ***全体成績の計算 採点する人数や平均点・最高点・最低点を計算します。 まず、B53セルに「人数」、B54セルに「平均点」、B55セルに「最高点」、B56セルに「最低点」と入力してください。 次に関数を使って計算をします。使用する関数は、COUNT, AVERAGE, MAX, MINです。 -COUNT(数値が入ったセルの個数を計算する) --書式 : COUNT(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :個数を計算するセルの範囲 -AVERAGE(平均を計算する) --書式 : AVERAGE(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :平均を計算するセルの範囲 -MAX(指定された範囲の最大の数値を返す) --書式 : MAX(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :最大を求めるセルの範囲 -MIN(指定された範囲の最小の数値を返す) --書式 : MIN(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :最小を求めるセルの範囲 では、次のようにして計算をします。 +C53セルをクリックしてアクティブにします。 +「関数の挿入」ボタンをクリックします。 #ref(excel01.png,nolink) +利用する関数を選びます。~ 利用したい関数の分類を選んだあと、関数名を選びます。「関数の分類」から「''統計''」を選び、「関数名」から「''COUNT''」を選びます。「OK」ボタンをクリックします。 #ref(excel08.png,nolink) +次に、関数に与える引数を設定します。 ++「数値1」の入力欄の中を削除します。 ++C2〜C51のセルをマウスをドラッグして範囲指定します。 ++「数値1」に「C2:C51」と設定されているのを確認できたら、「OK」ボタンをクリックします。 #ref(excel10.png,nolink) +C53セルに「=COUNT(C2:C51)」という計算式が設定されます。 同じような操作をして、C54セルにAVERAGE関数で平均点を、C55セルにMAX関数で最高点を、C56セルにMIN関数で最低点を計算してください。計算できると次のような計算式が設定されます。いずれの関数も分類は「統計」です。 -C54セル : =AVERAGE(C2:C51) -C55セル : =MAX(C2:C51) -C56セル : =MIN(C2:C51) これで出席点の全体成績が計算できました。 これらの計算式をコピーして、課題・期末テスト・合計の全体成績(D53〜F56)も計算してください。 上の「相対参照」の説明を参考にして、マウスを使って、計算式をコピーしてください(ヒントは、まずC53〜C56までのセルをマウスで範囲指定します)。 #ref(excel11.png,nolink) **成績表の作成(さまざまな関数の利用) ***ある条件の人数を数える ここでまでに紹介した関数(SUM, COUNT, AVERAGE, MAX, MIN)は、オートSUMからも利用できる、基本的な関数です。ここからは、少し複雑な処理をする関数を紹介します。 出席・課題・期末テストの各評価について、60点以上の人数を計算しましょう。 特定の条件を満たすセルの数を数える関数''COUNTIF''を使います。 -COUNTIF(指定された範囲のセルのうち、検索条件に一致するセルの個数を返す) --書式 : COUNTIF(範囲, 検索条件) --引数 : 範囲 : 個数を求めるセルの範囲 --引数 : 検索条件 : 個数を求めるセルの検索条件 検索条件には、次のような''比較演算子''を使います。ここでは、''「60点以上」''という条件があるので''「>=60」''が検索条件になります。 |CENTER:演算子|CENTER:式|CENTER:内容|CENTER:例|CENTER:結果|h |=(等号)|CENTER:A=B|AとBが等しい|1=2|FALSE| |<>(不等号)|CENTER:A<>B|AとBが等しくない|3<>4|TRUE| |>(〜より大きい)|CENTER:A>B|AがBより大きい|5>6|FALSE| |<(〜より小さい)|CENTER:A<B|AがBより小さい|7<8|TRUE| |>=(〜以上)|CENTER:A>=B|AがB以上である|9>=10|FALSE| |<=(〜以上|A<=B|CENTER:AがB以下である|11<=11|TRUE| まず、B57セルに「60点以上の人数」と入力してください。 そして、次のようにして計算をします。 +C57セルをクリックしてアクティブにします。 +「関数の挿入」ボタンをクリックします。 +利用する関数を選びます。~ 利用したい関数の分類を選んだあと、関数名を選びます。「関数の分類」から「''統計''」を選び、「関数名」から「''COUNTIF''」を選びます。「OK」ボタンをクリックします。 #ref(excel13.png,nolink) +次に、関数に与える引数を設定します。 ++「範囲」の入力欄の中を削除します。 ++C2〜C51のセルをマウスをドラッグして範囲指定します。 ++「検索条件」に「">=60"」と入力します。 ++「OK」ボタンをクリックします。 #ref(excel14.png,nolink) +C57セルに「=COUNTIF(C2:C51,">=60")」という計算式が設定されます。 計算できたら、C57の計算式をD57とE57のセルにコピーしてください。 ***評価をまとめる ふたたび、各個人の成績にもどります。 出席・課題・期末テストの各評価をまとめて、最終的な評価を決めましょう。 各評価の平均を最終的な評価にすることにします。 まず、G1セルに「評価」と入力してください。 次に、G2セルに1番目の最終評価を計算する計算式を入力します。 ここで平均を求めるAVERAGE関数を使うこともできますが、ひとつ問題があります。 各評価のいずれかが空白の場合、AVERAGE関数では正しい結果が得られません。 AVERAGE関数は、与えられた範囲に空白のセルがあると、そのセルを除いた個数の平均を計算してしまいます。 ここでは、評価の合計を評価の数で割って計算します。 指定された範囲の空白でないセルの個数を求めるCOUNTA関数を使います。 COUNTA関数を使って、評価のラベル(出席・課題・期末テスト)の数を数えることにします。 -COUNTA(空白でないセルの個数を計算する) --書式 : COUNTA(数値1, 数値2, ...) --引数 : 数値1, 数値2, ... :個数を計算するセルの範囲 ここでは、「関数の入力」ボタンを使わずに、直接関数を入力します。 +G2セルをクリックして、アクティブにします。 +「=SUM(C2:E2)/COUNTA(C1:E1)」と数式を入力します。 +Enterキーを押すと、計算式が入力されます。 #ref(excel15.png,nolink) ***絶対参照 次に、入力した数式をG3〜G51にコピーすることにしましょう。 +Gセルをクリックして、アクティブにします。 +G2セルの枠の右下の四角形(フィルハンドル)をマウスでG51セルまでドラッグします。 +G3〜G51セルに計算式がコピーされます。 ここで、G3セルにコピーされた計算式を見てみましょう。「=SUM(C3:E3)/COUNTA(C2:E2)」となっていています。コピー元のG2の数式が相対参照だったので、このような結果になりましたが、これでよかったのでしょうか? 「COUNTA(C2:E2)」では、もしC2〜E2の評価のうち、ひとつでも空白があると計算結果がおかしくなってしまいます。数式をコピーしても、C1〜E1の空白でないセルの個数が求められるように、セルの参照を固定しなくてはなりません。 特定のセルを参照するために、計算式をコピーしても参照先のセルが変わらない、セルの番地を基準にした絶対的な位置を使った参照のしかたを、「''絶対参照''」といいます。 絶対参照を使うには、動かしたくないセル番地の行番号や列番号の前に「''$''」をつけます。相対参照とまとめると次のようになります。 |参照のしかた|例|h |相対参照|A1| |絶対参照(セルを固定)|$A$1| |絶対参照(行を固定)|A$1| |絶対参照(列を固定)|$A1| ここでは、セルか行を固定すればよいのがわかりますので、「COUNTA($C$1:$E$1)」を使うことになります。 +G2セルをクリックして、アクティブにします。 +「=SUM(C2:E2)/COUNTA($C$1:$E$1)」と数式を入力します。 +Enterキーを押すと、計算式が入力されます。 次に、前の説明のように、入力した数式をG3〜G51にコピーしてください。 そして、正しくコピーできているかどうか確認しましょう。 G3セルの計算式は「=SUM(C3:E3)/COUNTA($C$1:$E$1)」となっているはずです。 ***関数のネスト 最終評価ができあがりましたが、小数のついた評価もあると思います。 セルの書式設定で小数点以下を表示させなくすることもできますが、 ここでは新たな関数''ROUND''を使って、小数点以下を四捨五入することにします。 -ROUND(指定された桁で、四捨五入する) --書式 : COUNTIF(数値, 桁数) --書式 : ROUND(数値, 桁数) --引数 : 数値 : 四捨五入する数値 --引数 : 桁数 : 四捨五入する桁数 ---0か省略なら、最も近い整数 ---正の整数なら、指定された小数点以下の桁になるように四捨五入 ---負の整数なら、指定された整数部分の桁(1の位が0, 10の位が1)で四捨五入 もう一度計算式を入力しなおしましょう。整数を求めたいので、引数の桁数の部分は0にします。 +G2セルをクリックして、アクティブにします。 +「=ROUND(SUM(C2:E2)/COUNTA($C$1:$E$1),0)」と数式を入力します。 +Enterキーを押すと、計算式が入力されます。 +入力した数式を、マウスをドラッグして、G3〜G51にコピーします。 #ref(excel16.png,nolink) このように、関数の引数に、さらに別の関数を使うことを、''関数のネスト(入れ子)''といいます。 ***成績の順位を調べる 最終評価をもとに、個人の成績の順位を調べます。 順位を調べるには、''RANK''関数を使います。 -RANK(数値が指定された範囲で何番目に位置するかを返す) --書式 : RANK(数値, 範囲, 順序) --引数 : 数値 : 順位を調べる数値 --引数 : 範囲 : 調べるセルの範囲 --引数 : 順序 : 順位の並べ方 ---0か省略なら、大きいもの順に順位をつける(降順) ---0以外の数字なら、小さいもの順に順位をつける(昇順) まずH1セルに「順位」と入力します。 そして、次のようにして、順位を設定します。 +H2セルをクリックしてアクティブにします。 +「関数の挿入」ボタンをクリックします。 #ref(excel01.png,nolink) +利用する関数を選びます。~ 利用したい関数の分類を選んだあと、関数名を選びます。「関数の分類」から「''統計''」を選び、「関数名」から「''RANK''」を選びます。「OK」ボタンをクリックします。 #ref(excel17.png,nolink) +次に、関数に与える引数を設定します。 ++「数値」の入力欄をクリックします。 ++G2のセルをクリックします。「数値」に「G2」と設定されます。 ++「範囲」の入力欄をクリックします。 ++G2〜G51のセルをマウスをドラッグして範囲指定します。「範囲」に「G2:G51」と設定されます。 ++「順序」の入力欄をクリックします。 ++「0」を入力します。「OK」ボタンをクリックします。 #ref(excel18.png,nolink) +H2セルに「=RANK(G2,G2:G51,0)」という計算式が設定されます。 ここで、この計算式をコピーする前に、よく見てみましょう。 順番を求める範囲「G2:G51」は相対参照になっていますので、計算式をコピーすると、コピー先の計算式では行番号の部分が変わってしまいます。これでは正しい順位が求められません。 順番を求める範囲「G2:G51」を絶対参照にすれば、計算式をコピーしても、参照するセルの範囲は変わりません。直接計算式を編集することもできますが、次のような方法でも簡単に絶対参照形式にできます。 +H2セルをクリックします。 +数式バーの計算式「=RANK(G2,G2:G51,0)」の「G2:G51」の「G2」をクリックします。 +F4キーを何回か押して、「$G$2」か「G$2」に変更します。 +「G51」をクリックして、F4キーを何回か押し「$G$51」か「G$51」に変更します。 #ref(excel19.png,nolink) 数式を変更できたら、H2セルの計算式を、マウスをドラッグして、H3〜H51セルにコピーしてください。 ***合否を判定する 最後に、最終評価をもとに合格か不合格かを判定します。 60点以上であれば「合格」、59点以下であれば「不合格」と表示されるようにします。 このような、条件によって結果を変えるには、''IF''関数を使います。 -IF(指定された条件(論理式)によって、あっているか(真)違っているか(偽)を判断し、真と偽のそれぞれの場合の結果を返す) --書式 : IF(論理式, 真の場合, 偽の場合) --引数 : 論理式 : 評価する条件(比較演算子を使う) --引数 : 真の場合 : 論理式の結果が真(TRUE)の場合に返される値 --引数 : 偽の場合 : 論理式の結果が偽(FALSE)の場合に返される値 次の比較演算子を使うとすると、論理式は「セルの値>=60」となります。また、真の場合と偽の場合はそれぞれ「"合格"」「"不合格"」となります。文字列を引数にするときには「"(ダブルクォーテーション)」で文字列を囲みます。 |CENTER:演算子|CENTER:式|CENTER:内容|CENTER:例|CENTER:結果|h |=(等号)|CENTER:A=B|AとBが等しい|1=2|FALSE| |<>(不等号)|CENTER:A<>B|AとBが等しくない|3<>4|TRUE| |>(〜より大きい)|CENTER:A>B|AがBより大きい|5>6|FALSE| |<(〜より小さい)|CENTER:A<B|AがBより小さい|7<8|TRUE| |>=(〜以上)|CENTER:A>=B|AがB以上である|9>=10|FALSE| |<=(〜以上|A<=B|CENTER:AがB以下である|11<=11|TRUE| まずI1セルに「合否」と入力します。 そして、次のようにして、順位を設定します。 +I2セルをクリックしてアクティブにします。 +「関数の挿入」ボタンをクリックします。 +利用する関数を選びます。~ 利用したい関数の分類を選んだあと、関数名を選びます。「関数の分類」から「''論理''」を選び、「関数名」から「''IF''」を選びます。「OK」ボタンをクリックします。 +次に、関数に与える引数を設定します。 #ref(excel20.png,nolink) ++「論理式」の入力欄をクリックし、「G2>=60」と入力します。 ++「真の場合」の入力欄をクリックし、「"合格"」と入力します。 ++「偽の場合」の入力欄をクリックし、「"不合格"」と入力します。 ++「OK」ボタンをクリックします。 #ref(excel21.png,nolink) +I2セルに「=IF(G2>=60,"合格","不合格")」という計算式が設定されます。 あと、I2セルの計算式をI3〜I51セルにコピーするれば、できあがりです。 マウスを マウスをドラッグして、コピーしてください。 ***仕上げ 最終評価の全体平均点・最高点・最低点を計算します。 出席の評価の計算をコピーしましょう。次のように操作してください。 +C53〜C57のセルを、マウスをドラッグして、範囲指定します。 +範囲指定したところを右クリックし、メニューから「コピー」を選択します。 +G53セルを右クリックして、メニューから「貼り付け」を選択します。 最後に見た目を整えるために、次の設定をしてください。 -A列の幅を「5.00」にする -1行目にある表の項目名(番号、名前、課題など)を中央揃えにする // **百ます計算の作成 // 小学校の算数で、全国的なブームになっているものがあります。 // ''「百ます計算」''というものです。10×10のマス目をつくり、その上側と左側に10個の数字を並べます。そして、それぞれのマス目に上側と左側の数字を計算(足し算や掛け算)し、答えを書き込むというものです。簡単な計算を何回も繰り返し、できた時間を計って、基礎学力をアップさせようというものです。 // 今回は、これをExcelで作ってみましょう。上側と左側の数字を設定すれば、自動でマス目に計算結果が表示されるようにしてみましょう。 // ***マス目の作成 // ***行の高さ・列の幅の設定 // ***形式を選択して貼り付け // ***計算式の入力、セルのコピー // ***絶対参照の利用 ---- ここまでできたら、課題の説明にすすんでください。 ここまでできたら、[[課題の説明>../7thExercise]]にすすんでください。 |