Excelのヒント:関数編

ExcelTipsへもどる


関数のヒント

表の位置指定

OFFSET(セル,行数,列数), INDEX(セル範囲,行数,列数)

起点となるセルから指定行数、指定列数をずらしたセルの中身を関数値とする。OFFSETとINDEXはセルを指定するか、セル範囲を指定するかの違い。INDEXは表の中の要素を選ぶということが目的の関数なので、セル範囲の外のセルを参照しようとすると参照エラーになる。OFFSETの場合は、単に、あるセルを基準として何番目のセルを指し示すという目的なので、行数列数はマイナスでもよい。「アドレス操作」のための関数と考えた方が良い。

=OFFSET(A1,4,3)		(1)
=OFFSET(A1,RANDBETWEEN(0,9),0)		(2)

(1)は「=D5」と書いたのと同じ。
(2)は、セルA1:A10の中からランダムに一つを選ぶ。

OFFSETの4,5番目の引数として行数、列数を指定すると、関数値はセル範囲となる。

ADDRESS + INDIRECT

ADDRESS(行番号,列番号,参照方式)は、セルの座標を指定して、セル記号(A1のような)を生成する関数。「参照方式」で相対参照、絶対参照、複合参照形式にできる。
関数値は文字列($A3のように)なので、その中身のデータを参照するにはINDIRECT関数を使う。

=INDIRECT(ADDRESS(10,5,2))

これは「=E$10」と書いたのと同じ

表検索

VLOOKUP(文字,セル範囲,抽出列番号,検索オプション)

MATCH(文字,セル範囲,検索オプション)

LOOKUP関数は、検索文字が左端、あるいは上端になければいけないという制約がある。MATCH関数は任意のベクトルを指定して検索するので、これとINDEX関数を組み合わせれば、任意の列をキーにするLOOKUP関数の拡張版が実現できる。

=INDEX(A1:A9,MATCH(B1:B9,"A"),0)

キーが右端についているデータテーブルがセルA1:B9にあり、B列を検索してA列から該当のデータを取り出す場合の書き方である。

VLOOKUP関数の簡易テーブル作成

VLOOKUP関数の変換表が簡単なものならば、関数の引数として生成することが出来る。

=VLOOKUP(A9,{0,"F";60,"C";70,"B";80,"A"},2)

これは、A9の内容が60未満ならばF、60以上70未満ならばC、...という文字を返す関数になっている。数値はそのまま、文字列は""で囲む必要があり、キーの数値・文字列は大きさの順番に並んでいなければいけないことは、通常のvlookup関数と同じです。

検索する数値が1,2,3,...のような連続した自然数ならば、CHOOSEという関数を使ってもよい。

CHOOSE(n,リスト)

リストはカンマで区切られた任意の文字列。リストの中のn番目の要素を関数値とする。リストはセル範囲ではなく、カンマ区切りでなければいけない。

=CHOOSE(A1,"◎","○","▲","×")				(1)
=CHOOSE(B2, STDEV(C1:C10), STDEVP(C1:C10))	(2)

(1)は、セルA1が1,2,3,4のときに、それぞれの文字が表示される。VLOOKUP関数の簡易版といってもよい。

(2)は、セルB2が1の時不偏分散の平方根が、セルB2が2の時標本分散の平方根が計算される。

ページトップへもどる


表の縦横合計を一度に計算する

2次元のデータテーブルが入力されているとき、表の周辺に各行の和、各列の和を計算するために、一々「=sum(...)」関数を入力しなくてもすむ方法がある。データ表に右一列分、下に一行分追加してアクティブにし、「ホーム」→「編集」→「合計」ボタンをクリックすると、各列の和、各行の和が一度に計算される(セルA1:C5にデータがあるとき、セルA1:D6をドラッグしてアクティブにし、「ホーム/編集/合計」ボタンをクリック)

ORの使い方:多重「または」の入力法

「ある変数がa,b,c,d,eのいずれかならば」というように、同一条件が多数ある場合は集合的な書き方が許される。

=IF(OR(A1={2006,2004,2001}),"vintage","average")

ページトップへもどる


(関数)文字列の置き換え(substitute, replace, trim)

連続した空白文字を一つの空白文字で置き換える場合は「TRIM」

文字列を検索して、特定の文字列を別の文字列で置き換える場合は「SUBSTITUTE」

    * たとえば、「=substitute(a1," "," ")」(全角空白を半角空白に置き替える)

特定の位置にある文字列を入れ替える場合は「REPLACE」(文字列の内容は問わない)

    * たとえば、「=replace(文字列,開始位置,文字数,置換文字列)」(「文字数」を0とすれば、開始位置(の手前)に文字列を挿入するだけ)
    * たとえば、「="〒"&replace(a1,4,0,"-")」(郵便番号1650031を"〒165-0031"と変換する)

ページトップへもどる


日付関数

date(yy,mm,dd) 年、月、日を入力して通算日数を計算する
weekday(date) 通算日数の曜日を数字で返す(1が日曜日、7が土曜日)
eomonth(date,mm) 通算日数からmm月後の最終日の通算日数を計算する(mm<0ならば遡る)
day(date)
通算日数を年月日に換算したときの「日」を返す

曜日を 表 示する

weekday()関数で曜日の番号を計算し、「表示形式」を「aaa」とする。「ddd」とすると、英語の3文字略称が表示される

=INDEX({"日","月","火","水","木","金","土"},WEEKDAY(DATE($B$2,$B$3,B5)))

としても良い

万年カレンダー

最初の週の空白をどう表現するかが決め手。指定月の初日の曜日をweekday()関数で調べ、列番号がそれより小さければ空白、等しければ 「1」、さもなければ左隣の次の日、を入力するようにすればよい。

=if(weekday(date(yy,mm,1))>column(),"",if(weekday(date(yy,mm,1))=column(),1,a5+1))

2週目からは、前の日がその月の月末でない限り、1を加え、さもなければ空白を入力するような数式を入力すればよい (daysはその月の日数)。

=if(a6>=days,"",a6+1)

ある月(yy/mm/ddの 日数を求めるには、翌月の1日から、その月の1日の差を計算すればよい。

=if(mm<12,date(yy,mm+1,1)-date(yy,mm,1),31)

あるいは、eomonth() 関数が使えれば、その月の最終日が計算できるので、簡単。

=day(eomonth(date(yy,mm,1),0))

分数の扱い

分数の入力

帯分数は、整数部分と分数部分の間に半角スペースを挟めばよい(例、「1 1/6」のように) 。整数部分がない場合は 0と入力するが、0は表示されない

分数表示形式

「ホーム」→「数値」→「表示形式」メニューから「分数」オプションを選ぶと、整数部分と分数部分の間に半角スペースを入れて表示されるようになる。(例、「1.222」と入力して、そのセルを「分数」表示形式にすると「1 2/9」と表示される。1.23と入力しても「1 2/9」と表示されるので、実数を入力した場合は分母が一桁の分数に近似されるらしい)

分数同士の計算

通常の計算に従って行われ、分数形式で表示される。が、あまり信用しない方がよい。たとえば、セルA3に「0 1/5」、セルA4に「0 1/3」と入力して、セルA5に「=A3+A4」と入力すると、表示されるのは「1/2」! セルA5をクリックすると、数式バーには0.53333と正しく表示されているので、計算は正しいが、分数表示にすると、通分はしないで分母が一桁の分数で近似表示されるようだ。

関数アラカルト

「挿入/関数...」メニューを選び、「関数の分類」の選択肢から適当な分類を選ぶと、「関数名」がリストされます。その中から必要なものを選び、 「この関数のヘルプ」をクリックすると使用例が表示されます。とても全部は説明し尽くすことはできません。「ヘルプ」はかなり丁寧に書いてありますから、たいていはそれでわかるはずです。

数学関数 

SQRT 平方根(SQRT)
SIN COS TAN 三角関数(SIN COS TAN ...)
EXP 指数関数(EXP)、対数関数(LN LOG LOG10)
ABS 絶対値(ABS)
ROUND 四捨五入(ROUND)、切捨て(FLOOR ROUNDDOWN TRUNC)、切り上げ(CEILING ROUNDUP)
MOD 割り算のあまり(MOD)
FACT 階乗(FACT)
GCD LCM 最大公約数(GCD)、最小公倍数(LCM)

統計 

SUM 合計(SUM)
AVERAGE 平均(AVERAGE)
MAX MIN 最大値(MAX)、最小値(MIN)
STDEV STDEVP 標準偏差(STDEV、STDEVP)
COUNT 数える(COUNT COUNTA COUNTIF)
CORREL 相関係数(CORREL)
FREQUENCY 度数分布(FREQUENCY)

論理演算 

IF 条件分岐(IF)
AND OR NOT 条件式(AND OR NOT)
TRUE FALSE 論理定数(TRUE FALSE)

行列演算

Ctrl キーと Shift キーを押しながら Enter キーを押します

MMULT 行列の積(MMULT)
MDETERM 行列式(MDETERM)
MINVERSE 逆行列(MINVERSE)
SUMPRODUCT 内積(SUMPRODUCT)
TRANSPOSE 転置(TRANSPOSE)

財務

NPV 現在正味価値(NPV)
FV 将来価値(FV) 定額の支払いを定期的に行い、利率が一定であると仮定して、投資の将来価値
PMT 定額支払い額(PMT) 一定利率の支払いが定期的に行われる場合の、ローンの定期支払額
PV 現在価値(PV) 将来行われる一連の支払いを、現時点で一括払いした場合の合計金額
IRR 内部収益率

日付/時刻

NOW TODAY 現在時刻(NOW TODAY)
YEAN MONTH DAY 年(YEAR)、月(MONTH)、日(DAY)
WEEKDAY WEEKNUM 週(WEEKDAY WEEKNUM)
TIME HOUR 時刻(TIME HOUR)
SECOND 秒(SECOND)
EOMONTH
月数経過後の日付

検索/データベース

VLOOKUP HLOOKUP 表検索(VLOOKUP HLOOKUP)
DCOUNT DSUM ... データベース関数(DCOUNT DSUM DAVERAGE ...)

ページトップへもどる


用語と画面構成

http://www.arkfact.com/excel/01/nyumon1-99.html

マウスポインタの形

アイコンの種類

http://www.arkfact.com/excel/01/nyumon1-99.html

ページトップへもどる