エクセル数式で計算しよう

エクセル(Excel)は表計算ソフトです。もちろん表の中では文字もたくさん使うことでしょうが、数字を入れて数式で計算することが本来の使い方でしょう。計算するために数式を使うことは苦手と思われている方のために、私自身がよく使う数式の使い方を説明します。

 このファイルは、「My Free-style PC」の「EXCELコーナー」のファイルです。EXCELの解説ファイルでは、サンプルとして作成した表を提供していますので是非一通り御覧ください。



 目 次

1 基本的な数式の使い方

  1-1 四則演算 (計算の順序、0除算エラーの回避)
  1-2 集計のためのΣ計算 (SUM関数とVBA)
  1-3 日付・時刻の計算 (日数の計算、時間数の計算)

2 定数と変数の考え方

3 セルの参照の使い方

1 基本的な数式の使い方

1-1 四則演算

四則演算の演算記号は、足し算が「+」、引き算が「-」、掛け算が「*」、割り算が「/」です。

 この足し算、引き算、掛け算、割り算の四則演算だけで、簡単な表を作ることが多いでしょう。四則演算で注意することは、計算する順序を考えること、割り算は、0 除算エラーになる可能性があることです。


<計算する順序>

 掛け算と割り算が先で、足し算と引き算は後という算数のルールは、もちろんエクセルでも同じですから、計算式には( )を使う場合があることも同じです。

 A + B * C と (A + B) * C の意味の違いは解りますね。

 これも算数と同じで、 先にAとBを足して、後からCを掛けるときは、(A + B) * C の式となり、エクセルでは例えば次のように記述します。

 =(A3+B3)*C3  A3のセルの値とB3のセルの値を足して、C3のセルの値を掛ける

 上の式をD3というセルに入力すると、D3=(A3+B3)*C3となります。

 消費税が外税価格のものを内税額表示にするには、1.05掛けますね。
 もちろん式に =(A3+B3)*1.05 と直接定数を書き込むこともできますが、外税と内税が混ざって並んでいる場合は、Cの列に、1 と 1.05 のどちらかを入れておくという方法もあります。この場合は、内税か外税の二者択一ですが、もっと選択が多い場合は、数式に定数として入れることは大変でしょう。


 次に有効桁数の問題です。
  Excel 2002の仕様を確認すると、「 Excel では、格納したり計算に使う数値の有効桁数は15 桁です。」と説明されています。

 電卓では桁数の制限があり、固定小数点表示ではオーバーフローしてしまうことがありますが、エクセルでは、有効桁数の15桁をオーバーしても計算は実行され、例えば計算結果が倍の30桁になっても、頭から15桁までは正しい数値が入り、16桁目以後は0が表示されます。

 例えば、=888888888888888 * 111111111111111 と式を入力すると、計算結果は
 98765432098765200000000000000
 と表示されます
 (セルの幅をたっぷりとって、書式設定で数値として指定)

 また、12345678901234567890123 と15桁を超えて数値を直接入力すると、
 12345678901234500000000 と格納されます。 

 こんなに大きな桁の数値を扱うことはなく、実用的には問題ないのですが、技術計算などは計算過程において、掛け算を続けると精度が落ちることも理屈としてはあります。

 また電卓での手計算では、割り算の結果を、小数点以下4桁ぐらいまでメモしておいて、その後、大きな桁に掛け算をすると、必要な桁数の精度が確保されないことがあります。こちらの方がおかし易いミスですが、そのためオーバーフローしなければ、掛け算を先にして割り算を後にする方が手計算では良いでしょう。

 A*(B+C)/D という式は、 (B+C)/D*A でも A*B/D+A*C/D でも同じことですね。

 エクセルでは、有効桁数は 15 桁あり、どの式でも普通は良いのですが、私は割り算は後にするという習慣が身についており、基本的には A*(B+C)/D を使います。

 次に、前年比、前月比、構成比などパーセント(%)で表示するケースの問題です。
 単に表示のときにパーセントにしたいだけであれば、セルの書式設定の表示形式で、パーセンテージを選び、小数点以下の桁数を指定すれば良いのです。

 しかし何も表示形式で変えなくても、次の式のように末尾に *100 を加える、つまり 100倍すればセルに格納されている数値が%の値となります。

 =C3/B3*100

 次に、前年比や前月比では、増減率(増加率、減少率)を求めることも多いものです。
 増減率では、例えば112.8%を12.8%、96.8%を−3.2%と表示しますが、次の式のように末尾に *100-100 を追加すれば良いのです。

 =C3/B3*100-100

 細かいことですが、減少率、つまり数値がマイナスとなるときは四捨五入をどう扱うかという問題があります。

 上の式、=C3/B3*100 で B3に 1200、C3に 1161 という値を入れると答えは 96.75 となります。
 また、=C3/B3*100-100 で B3に 1200、C3に 1161 と同じ値を入れると答えは -3.25 となり減少率で表示されます。

 もし小数点以下は一桁で表示したければ、96.75は、四捨五入して96.8となりますが、
−3.25は四捨五入すると−3.3となります。ちょうど四捨五入する桁で数値が 5 となって割り切れたときだけですが、気になるようであれば処理の仕方を決めておくと良いでしょう。

 上記の結果を−3.2と表示したければ、次の式のようにROUND関数を使えば解決します。

 =ROUND(C3/B3*100,1)-100

 ROUND関数で先に小数点以下一桁にしてから、100を引けば良いのです。

 構成比の場合でも、四捨五入の関係で全部足すと100にならず100.1となったり99.9となることは止むを得ないことであり、この減少率の特殊ケースも、普通はこんな面倒なことをしなくても良いのです。要はROUND関数もあるということを覚えておいてください。


 増減率もパーセント表示しなくて、基準値を1として増加率や減少率を出すこともあります。途中の計算過程で差という実数でなくて、率で扱う場合など次の式のように増加分の率、減少分の率を出すため本来の式に-1を加えることもあります。

 =C3/B3-1

 技術計算などで、プラス・マイナス符号を変えたいときもあります。*-1と演算記号が並びますが、次の式のように-1掛ければよいのです。 

 =C3/B3*-1


< 0 除算エラーの回避>

 割り算の場合、分母が0であると計算できないため、0 除算エラーとなります。
 0 除算エラーを避けるためには、分母が0かどうか確認し、0であれば分数の計算を実行しないで、ブランク(空白)または0で表示するようにします。

 IF関数で分母のC3セルを調べ、空白であれば、空白のままにします。

 =IF(C3=””,””,B3/C3)
 最も普通の使い方です。ただしC3が0であればエラーとなります。

 =IF(C3=””,0,B3/C3)
 分母が空白であれば、0にします。
 数値として処理したい場合に使いますが、C3が0であればエラーとなります。

 =IF(C3=0,””,B3/C3)
 分母が0であれば、空白にします。
 最終的に見やすくするため空白に戻すときに使います。

 =IF(C3=0,0,B3/C3)
 分母が0であれば、0にします。
 技術計算など計算途中で、数値として処理したい場合に使います。

 この他にも、不等号を使うなど、いろいろ0 除算エラーを避ける方法はあります。
 この0 除算エラー対策も含めて、IF関数の使用法について「エクセルIF関数を使おう」で詳しく説明してますのでご覧ください。


1-2 集計のためのΣ計算

集計のためのΣ(シグマ)計算では、エクセルの場合、SUM関数が用意されています。
 例えば、縦にC6〜C10の集計をするためには、=SUM(C6:C10) という式、横にC3〜G3のセルを集計するためには、=SUM(C3:G3) という式で計算できます。
 また、=SUM(D5:E9)のように複数列の複数行のマトリックスの集計もできます。

 このようにSUM関数の使い方は簡単で便利ですが、しかし、エクセルのSUM関数は、あらかじめ定められた範囲のセルを足すものであり、範囲が決まってなくて足す個数が変わる場合には役に立たないのです。

 本来のΣ の一般式は、Σ=X1+X2+X3+・・・・・Xi ・・・・Xn であり、変数を i として不特定の個数を足すものです。

 エクセルでは、マクロ(一連の処理を記録して自動的に実行させる機能)を記録する VBA(Visual Basic for Aplications)というプログラミング言語を使用すると、本来のΣ計算の数式に近い使い方ができます。

 下の画面は、VBAのSUBプロシージャのコードであり、For〜Nextステートメント(命令文)を使用して、任意の縦の連続セルを集計することができる.ものです。

 
 そして上のVBAのプログラムは、右の表のC5セルを計算し、この表では他に数式は使っていません。

 いきなりVBAの説明は難しいので省きますが、それでも、このSUBプロシージャの記述は、簡単だと思いませんか。

 しかも変数「i」と「j」の定義、2行目と3行目のDimステートメントは省くこともできるのです。

 例では、3列、つまりC列の8行目から17行目までのセルの値を集計し、「75」という結果を出していますが、縦に連続して並んでいる数値を、任意の行から任意の行まで集計し、結果をC5セルに表示できます。

 つまり、C2セル開始行番号を、8から6に変え、C3セルの終了行番号を17から20に変えれば、6行目から20行目を集計し、C4セルの集計列番号を3から4に変えればD列を集計できます。

 欠点は、マクロを実行しないと計算されないことです。


For〜Nextステートメント中の Cells(5, 3).Value = Cells(5, 3).Value + Cells(i, j).Value という式は、エクセルで書けばC5=C5 + ij そして一般式では X=X+Y という数学的には成り立たない式ですが、プログラム上は、等号=右辺の「X+Y」の式の計算結果を左辺の「X」に代入するという意味であり、問題ないのです。

 つまり、一度このX=X+Yのステートメントを実行した後、Xの値はX+Yとなり、再度実行すれば、X=(X+Y)+Y、再々度実行すれば、X=((X+Y)+Y)+Yとなり、このときYの値をY1、Y2、Y3と変えて繰り返し足すために、For〜Nextステートメントを使っています。

 エクセルではセル以外に値を格納する変数が使えないため、例えばC5=C5+C6という計算式は循環参照となって基本的には使えませんが、VBAでは、C5=C5+C6、C5=(C5+C6)+C7、C5=((C5+C6)+C7)+C8・・・と足しこんで、任意のΣ(シグマ)計算ができるのです。

 平均値を求めるためには、AVERAGE関数が用意されており、例えば縦にC6〜C10のセルの値の平均値を求めるときは、=AVERAGE(C6:C10)という式で計算できます。

 しかしAVERAGE関数を使わなくても、集計値を集計件数で割れば平均値は計算でき、このように関数を使わないで数式を組み立てる工夫をすることが、数式に強く、計算に強くなる方法でしょう。

 VBAは、少しプログラムの知識がないと使うのは難しいでしょうが、数式を考えるために一般式化することや、循環参照は使えないとしても等号=は右辺の式の計算結果を左辺に代入するものという考え方は、エクセルで数式を作るためにも基本となることです。


1-3 日付・時刻の計算

9月5日から12月26日までは何日あるの? 今から1000日後は、何年何月何日か?
 うるう年もあり、一か月の日数も同じではなく、カレンダーを見てメモしないとすぐには解らないですね。

 時刻も、一日は24時間、一時間は60分と決まっていても、単純な引き算の数式では経過時間などの計算はできないですね。また深夜0時過ぎた時刻から、24時以前の時間を引き算することもできないですね。

 エクセルでは、面倒なので、1900年1月1日シリアル値1として、単純に数値化して計算できるようにしています。このことは、Excelのヘルプでは、日付と時刻の処理について、次のように説明されています。

 「Microsoft Excel」では、日付はシリアル値として連続番号で格納され、時刻は一日の一部として小数値で格納されます。日付と時刻は数値と見なされるため、加算や減算などの計算を行うことができます。たとえば、日付を他の日付から引いて 2 つの日付の差を計算することができます。日付をシリアル値として表示したり、時刻を小数値として表示したりするには、セルの表示形式を [標準]表示形式に変更します。」


日数の計算

 既定では、1900年 1月 1日シリアル値 1 として保存されます。
 そして翌日の1900年 1月 日は、シリアル値は です。
 そして、またその翌日1900年 1月 日は、シリアル値は です。

 以後、同じように、一日後はシリアル値が1足され、日付順に連続でシリアル値が並びます。
 そして例えば、2005年8月14日シリアル値は、38578であり、1900年1月1日から38578日目ということになります。

 試しにセルに2005年8月14日と入力してみてください。そして「セルの書式設定」の「表示形式」で、標準をクリックし指定して「OK」をクリックすると、シリアル値である38578と表示されます。再度「表示形式」で日付をクリックし、右側の「種類」の欄で、○○○○年○月○日や平成○○年○月○日を選び「OK」をクリックすれば日付表示に戻ります。

 ここで気をつけることは、1900年1月1日がシリアル値1ですから、何日後というときは、一般的には、38578-1、つまり38577日後ということが普通ということです、つまり1900年 1月 2日は、1月1日の翌日で、1日後と言って、普通は2日後言えば1月3日のことですね。

 これは便利なことで、2005年8月24日は2005年8月14日の何日後かという問いは、単純にシリアル値どうし引き算した結果「38588-38578=10」つまり10日後という答えで簡単です。

 具体的には、C3セルに「2005年8月14日」、D3セルに「2005年8月24日」と入力し、E3セルに何日後かの答えを計算させる場合、E3セルに「=D3-C3」と数式を入力するだけのことです。ただしC3セルとD3セルは日付と解るように入力することと、E3セルの表示形式標準(数値でも可)を指定してください。


 むしろ旅行スケジュールのように何日目と表す場合が注意が必要であり、初日が1日目で翌日が2日目となり、初日を数える必要があるため、2005年8月14日出発で2005年8月24日帰着の場合は、旅行期間はシリアル値どうし引き算し1日分に足し「38588-(38578-1)=11」11日間という答えが正解です。数式上は( )を使わず「38588-38578+1=11」でも同じです。

 具体的には、C3セルに「2005年8月14日」、D3セルに「2005年8月14日」と入力し、E3セルに旅行期間を計算させる場合、E3セルに「=D3-C3+1」と数式を入力します。初日の一日分を足せば良いのです。

 セルの表示形式の指定は前と同じです。なおE3セルは、標準を指定と説明しましたが、ユーザー定義を選んで、「#”日”」と指定すれば、11日と表示されます。この表中の単位の表示については計算の問題ではなく、書式設定でしなくても、いろいろ工夫の方法はあるでしょう。


時間数の計算

 シリアル値は整数ではなく小数点以下を付すと、その小数部は時刻を表します
 24時間を小数点以下で表すのですから、たとえば、シリアル値の小数部が 0.5 の場合は、正午を表し、0.25の場合は午前6時を、0.75の場合は午後6時(18時)となります。もちろん例示ですから連続しており、何時何分何秒までシリアル値で表すことができるのです。

 例えば、「2005年8月24日 16:00」とセルに入力し、シリアル値に変えてしまえば、日数の計算と同様にシリアル値で計算することにより、何ヶ月か先のある日時の時間数の計算もできるなど、時間数計算を自由にできるのですが、一々年月日から時刻を入力していては大変です。

 そのため、例えば「18:00」と時刻だけ入力しても、小数点部だけのシリアル値 0.75に置き換わるようになっています。

 残業時間などの計算は、C3セルに「18:00」、D3セルに「21:40」と入力し、E3セルに何時間かの答えを計算させる場合、E3セルに「=D3-C3」と数式を入力すれば結果がでます。ただしC3セルとD3セルは時刻と解るように例えば「○○:○○」入力することと、E3セルの表示形式は標準や数値ではなく時刻指定、「○○:○○」や「○○時○○分」を選んでください。

 実は、これで何も問題がないということではありません。
 残業時間が、深夜0時を超えたときは、「1:20」から「18:00」を引くとマイナスとなり表示形式に時刻を指定すればエラーとなります。

 回避の方法は、D3セルに「1:20」ではなく「25:20」と入力し、D3セルの表示形式を時刻を指定すると、入力は「25:20」でもセルの表示は「1:20」.と表示され、残業時間も7時20分と正しく計算されます。(じつは「25:20」のシリアル値は、「1.0555・・・」で、1900年1月1日の1時20分のシリアル値です。)

 「25:20」と入力することはスマートでなく、入力間違えしそうですからIF関数を使用して「1:20」と入力しても良いように修正したE3セルの数式が次の式です。

 =IF(D3-C3>0,D3-C3,D3+1-C3)

 上の式は、深夜0時を超えて終了時刻の数値が開始時刻の数値より小さくなった場合、つまりD3セルからC3セルを引き算してマイナスとなった場合には、1を足し(シリアル値の 1 は一日、つまり24時間のことです)「25:20」と入力したものとみなしているのです。


 しかし、時間計算はそれほど難しくなく、一日は24時間、一時間は60分、一分は60秒と規則性があり、何もシリアル値に頼らなくても計算することもできます。

 一日以内の時間数を分単位で数える時間割表や勤務時間数などであれば、一時間を60分と分換算して計算し、また時間に戻せばよいのです。

 そこでシリアル値を計算上使わないで、初めから単に数値として開始時間、終了時間を入力して、従事時間数を計算する事例として、次の表を作成してみました。

 

入力セルは、薄黄色のセルで、「月日」、「開始時刻」、「終了時刻」を入力する欄です。

 うち開始時刻と終了時刻の時間の入力欄であるC列E列のセルの表示形式は、ユーザー定義で、「0”時”」と指定しています。また分の入力欄のD列とF列は、ユーザー定義で、「00”分”」と指定しています。またG列のセルは、「0”時間”」、H列は「00”分”」です。

 「従事時間数」の計算結果の時間を表示するG列の数式、例えばG3セルの数式は、

=IF(C3="","",IF((E3-C3)>=0,ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0),ROUNDDOWN(((E3-C3+24)*60+F3-D3)/60,0)))

と入力していますが、少し難しいので色分けして分解して説明します。

=IF(C3="","",IF((E3-C3)>=0,ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0),ROUNDDOWN(((E3-C3+24)*60+F3-D3)/60,0)))

 赤色((E3-C3)*60+F3-D3)/60が本来の計算式であり、まず (E3-C3)*60 時間の部分は、E3セル終了時刻の時間からC3セル開始時刻の時間を引き算して、60倍、つまり分に換算しています。

 次に +F3-D3 とF3セルの終了時刻の「分」を足して、D3セルの開始時刻の「分」を引き、
(E3-C3)*60+F3-D3 これで分単位の従事時間数が550分と計算されています。

 しかしG列は、時間を表示する欄ですから、再度60で割り、端数は ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0) ROUNDDOWN関数を使用して切捨て、結果は9時間となります。

 でも終了時刻が深夜0時を過ぎたときに困りますね。そのため.IF関数を使っています。、

=IF(C3="","",IF((E3-C3)>=0,ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0),ROUNDDOWN(((E3-C3+24)*60+F3-D3)/60,0)))

 E3セルの終了時刻とC3セル開始時刻を比べるため、(E3-C3)と引き算し、プラスとなる場合、つまり終了時刻の方が値が大きい場合は問題なく、ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0) を計算します。

 もし(E3-C3)がマイナスとなる場合、つまり深夜0時を過ぎ終了時刻の方が値が小さい場合は、ROUNDDOWN(((E3-C3+24)*60+F3-D3)/60,0) は、(E3-C3+24) と24時間足して、例えば深夜1時を25時と置き換え計算しています。

 (開始時刻11時、終了時刻8時と入れても、終了時刻が後となりますから、もちろん結果は21時間となり、そしてこれが正解です。)

 最後に、
=IF(C3="","",IF((E3-C3)>=0,ROUNDDOWN(((E3-C3)*60+F3-D3)/60,0),ROUNDDOWN(((E3-C3+24)*60+F3-D3)/60,0))) のIF関数は、C3セルがブランクのときブランクのままにしておくために使用しています。


 次にH列の計算結果の分を表示する数式は次の式で簡単です。

=IF(C3="","",IF((F3-D3)>=0,F3-D3,F3-D3+60))

 単純に F3-D3 で都合が悪い場合、つまり表の5行目のように「30分」→「20分」の場合は、
F3-D3+60 と60分足して計算し、結果を50分としています。

 何か変?と思われるかもしれませんが、時間は時間で計算、分は分で計算と、別々に計算しており、時間はROUNDDOWN関数を使用して切捨てているためにこれで良いのです。

 つまり開始時刻「9時30分」→終了時刻「10時20分」は、時間は分換算して50分と計算した後に60で割り、小数点以下は切り捨て「0 時間」と表示しており、分の計算は終了時刻の方が値が小さくても後の時間であることを前提に+60し、「0時間40分」と表示すれば良いのです。


 G列とH列の合計欄は、別の式が必要であり、しかも単純にSUM関数を使って、G3セル〜G9セルを足しただけでは、正解ではありません。
 G列の合計欄は、

=SUM(G3:G9)+ROUNDDOWN(SUM(H3:H9)/60,0)

 G列の時間数を SUM(G3:G9) と合計した後、(SUM(H3:H9)/60 とH列の分を合計して60で割り時間換算し、小数点以下をROUNDDOWN関数で切り捨て、繰り上がる時間数を足しこんでいます。

 H列の合計欄は、

=SUM(H3:H9)-ROUNDDOWN(SUM(H3:H9)/60,0)*60

 H列の分数を SUM(H3:H9) と合計した後、60分以上となる部分を控除するため、(SUM(H3:H9)/60 と60で割り時間換算し、小数点以下をROUNDDOWN関数で切り捨て、切り捨てた後の整数に*60 と再度60を掛け、元の総分数から引き算しています。

 以上の4種類の数式で表は完成です。
 エクセルは、いつでも四捨五入してしまうので、親切というより、かえって使い難いと思うのですが、ROUNDDOWN関数が大活躍ですね。


 今回は、数式の使い方の説明ですから、日付と時刻を扱う関数については詳しく説明していませんが、Excelのヘルプで、「日付と時刻の関数」で検索すると、主にシリアル値を扱う上での便利な関数が説明されており、参考としてください。


 なお、この「勤務時間実績表」をクリックして、インターネットエクスプローラで開いて、ファイルメニューの「Microsoft Excel for Windowsで編集」をクリックすると、エクセルのファイルとして使うことができます。

 こちらは、1か月分記入できますので、そのまま時間外勤務を集計するために使用できます。また各自使い易いように修正しても良く、ご自由にお使いください。

2 定数と変数の考え方

定数と変数という概念があり、(2+3)*4 の2,3,4は定数で定められた値、(X+Y)*Z のX,Y,Zは変数で値が自由に代えれます。

 エクセルでは、変数というとVBAで使うものとして説明されており、前述したようにセルは、内部的な変数と違って、X=X+Y のXのように計算実行中に値が変わる変数としては使えないという制約があります。(D3=D3+C3 は循環参照となります)

 しかし本来、値が変えれるものが変数であり、広い意味ではセルは全て変数と考えて使用して差し支えないのです。

 D3=(A3+B3)*C3、では、答えの入るD3セルはもちろん数式上の変数です。

 A3、B3、C3は、値を変えることがあれば変数ですが、例えばC3は、1.05と固定値を入力するのであれば定数扱いにするセルとなります。

 セルに数式を入力しても、その数式を適用して計算するために必要なデータ(値)がなければ計算できません。そのため、データを入力するセルが必要であり、ある行または列の複数のセルを入力用に用意します。このデータを格納するセルも、いつでも値を変えて代入できるという意味では変数です。

 しかし、定数として参照元のセルに固定値(係数や切片、パラメータなど)を入力したり、数式中に、あらかじめ定められた係数を定数として入れておくことは、数式を容易にするために役に立ちます。

 特定の関係にある計算式を、一般式にするときに変数は用います。また変数を使い一般式として数式を考えることが、難しいと思っていた計算式を考える上で手がかりとなります。

 しかし、その一般.式で、固定値しか取らない変数は、定数として入力することで式が解りやすくなり、どうしたらよいか困ったときには定数として入力することで解決することがあります。

 ついでに余談として説明すると、この一般式を、使用するプログラム言語の定められたルールで命令文として記述することがプログラムの作成であり、プログラムの中核となる部分です。

 エクセルは単に表計算ソフトで変数という難しい説明を避けてますが、VBAでは変数を避けては使う意味がなく、データの内部的な保管場所として変数を定義することがVBAの説明書で最初に説明されています。

 VBAでは、条件分岐IF-Thenステートメントが使いやすいことと、このセルとは別にデータの保管場所として変数が使えることで、Do-LoopステートメントやFor-Nextステートメントの繰り返し実行の命令文が使えることが大きなメリットです。

3 セルの参照の使い方

 <相対参照、絶対参照、複合参照

セルを参照しながら計算することがエクセルの本質であり、数式では変数としてセルが参照されます。

 この参照先としてセルを特定するときに、例えばC3セルは、単に「C3」と数式に書いて支障がないのですが、同じ数式を複数のセルに入力することが多いエクセルでは、入力作業を容易にするために、相対参照と絶対参照、その複合参照が用意されています。

 相対参照では、数式を他のセルにコピーすると参照セルも変わります

 例えば、D3=(A3+B3)*C3

 この数式を同じ列の D4〜D10 セルにコピーすると、
 D4=(A4+B4)*CD10=(A10+B10)*C10

 のように、列が 4〜10 と自動的に変更されてコピーされます。
 この場合は正しくコピーされ便利ですが、勝手に変更して余計なことと思うことも、現実には多いでしょう。


 例えば、D3=C3/C15*100

 という数式は、C3〜C14の合計値がC15に計算されていて、構成比を求める式です。 
 このまま数式を、 D4〜D14 にコピーすると、
 D4=C4/C16*100D14=C14/C26*100 となり意図しない計算式に変わります。

 正しくは、D4=C4/C15*100D14=C14/C15*100 と合計値である分母のC15は、常に参照セルであり変わってはいけないのです。
 数式を他のセルにコピーしても、参照セルが変わらないようにするためには、絶対参照を使います。絶対参照では、行番号と列番号の前に「$」を付けます。

 この場合、D3=C3/$C$15*100 と合計値の「C15」を「$C$15」に変えてコピーすると、
 D4=C4/$C$15*100D14=C14/$C$15*100 となり、コピーしても式を修正する必要がないのです。


 絶対参照は、特定のセルを固定するもので、行番号と列番号の両方に「$」を付けますが、行番号と列番号のどちらか一方に「$」を付け固定する方法複合参照です。

 実は上の式は、D3=C14/C$15*100 と「C$15」と行のみ固定する複合参照でも結果は同じです。
   
 特定のセルに定数が入力してあり、そのセルを参照する場合は絶対参照が普通ですが、実用的には複合参照を使うことが便利で多いでしょう。

 規則性のない場所にコピーして使わない単純な数式は、相対参照のまま使った方が便利でしょうが、複雑な表で数式を使うときに、どの参照を使ったほうが良いのかということは、実は一概には言えない面があり、使い慣れていくよりないでしょう。

 My Free-style PC サイト内関連ファイルのご案内

EXCELコーナー

エクセルで表を作ろう」、「速攻Excel2007表の作成」、「速攻Excel表の作成
 エクセル初心者向けの入門ファイルです。サイト内のエクセルの解説ファイルを、学習のステップにあわせて順に目を通していただくためには、「エクセルで表を作ろう」を参照してください。


エクセル簡単テクニック前編」、「エクセル簡単テクニック後編
エクセルのオート機能 前編」、「エクセルのオート機能 後編
 エクセル初級者向けのファイルであり、見やすい、使い易い表を作成するためのエクセルの便利な機能を説明しています。


エクセル複数シートの活用」、「エクセルでグラフを書こう」、「エクセルIF関数を使おう
エクセルなぜ使えないの
 エクセル中・上級者向けのファイルであり、説明用に作成したサンプルの表を提供しています。


 他にサイト内には<Windows初心者コーナー>、<パソコン自作コーナー>、<ネットワークコーナー>があり、「My Free-style PC トップページ」からも各コーナーのファイルが閲覧できますので是非ご利用ください。

(2005年8月14日 当初執筆)

 Copyright (C) 2003〜 My Free-style PC −Windowsパソコン自習サイト. All Rights Reserved

<PR>




お買い得パソコン通販ショップ
Sycom オンライン
Dospara おすすめパソコン
STORM カスタムBTO PC
TSUKUMO BTOパソコン
VSPEC BTOパソコン
TWOTOP BTOパソコン icon
パソコン工房 BTOパソコン icon

ウイルスバスター公式トレンドマイクロ・オンラインショップ

サイト内他コーナー関連ファイル
アクセサリの使い方
パソコン普通の使い方
家庭内LAN・ファイル共有
Windows8への乗り換え
Windows7への乗り換え
Windows7の使い方・基本操作
Windows XPの導入
Windows7の導入
Windows8の導入・アップグレード
Windows8 DSP版インストール
自作パーツの選び方
セキュリティの基礎知識
Windows7の無線LANの設定