「エクセル関数」カテゴリーアーカイブ

rank関数

rank関数

RANK(数値,範囲,[順序])

範囲の中で数値(セルの値)の順位を返します。順序に0 を指定するか、省略すると、数値が大きい方から順に1、2、3と順位が付きます。順序に 0 以外の数値を指定すると、 数値が小さい方から順に1、2、3、と順位が付きます。ただし、数値が重複したら上位で同順位となり以降、欠番が生じます。

excel2010からrank関数はrank.eq関数とrank.avg関数に置き換えられました。後方互換のためにエクセル2013でも使用できます。

rank関数と同等の結果を返すのがrank.eq関数になります。

A B C
1 国語 順位
2 田中 88 =RANK.EQ(B2,B2:B5,0)
3 吉田 85
4 山本 69
5 吉村 92

セルC2にセルB2の値がB2からB5の範囲内で点数の多い順で何位かを調べるために、

=RANK.EQ(B2,B2:B5,0)

という式を入れると2という値が返ります(第3引数の0は省略できます)。この式をこのままオートフィルでコピーすると

=RANK.EQ(B2,B2:B5,0)
=RANK.EQ(B3,B3:B6,0)
=RANK.EQ(B4,B4:B7,0)

と範囲のセルも順にずれてしまうので

=RANK.EQ(B2,$B$2:$B$5,0)

と範囲をF4キーを使って絶対参照にしておけばオートフィルでコピーしても正しい順位が返ります。

rank

ゴルフのスコアのように数字が少ない方が順位が上になるような場合は第3引数の[順序]を0以外の数値(大体は1を使うことが多いと思いますが)、をしてすれば数値の少ないほうから1,2,3となります。

セルB3の値を88に変更し同順位があった場合を確認します。

A B C
1 国語 順位
2 田中 88 =RANK.EQ(B2,B2:B5,0)
3 吉田 88
4 山本 69
5 吉村 92

順位2が2人になり順位3が欠番となり次の順位が4になります。

rank_1

この順位2は本当は2.5位が本来の順でしょ、という風にしたい場合はrank.avg関数を使います。

=RANK.AVG(B2,$B$2:$B$5,0)

rank_2

if関数 おまけ AND関数 OR関数

if関数についてはif関数if関数ネストを参照してください。

if関数

IF(論理式, [真の場合], [偽の場合])

の論理式が真の場合は[真の場合]の部分の処理を行い、偽の場合は[偽の場合]の部分の処理を行うのですが、論理式が真の場合は論理式自体の結果はtrueで、偽の場合論理式自体の結果はfalseです。論理式だけをセルに数式として入力してみればわかります。

 

true

if関数で使ったように合否でB2のセルの値が80以上なら『良』としたいときに作ったif関数の論理式の部分だけセルC2に入力してみました。B2の値は88なので論理式が真になります。真になるということはtrueを返します。

このtrueとfalseですが、tureまたは、falseを返す関数がありますのでこれを論理式にすることができます。

例えばand関数

AND(論理式 1, [論理式 2], …)
すべての引数が TRUE と評価された場合は TRUE を返します。1 つ以上の引数が FALSE と評価された場合は FALSE を返します。

以上エクセルのヘルプから引用

ヘルプのままではわかりづらいかもしれませんが、and()のかっこの中がすべて真だったらtrueを返し、1つでも偽だったらfalseを返します。

A B
1 性別
2 田中
3 吉田
4 山本
5 全員男 =and(B2=”男”,B3=”男”,B4=”男”)

セルB5にB列の性別がすべて男かどうかをand関数で確認してみます。B4のセルの値は女なのでB4=”男”は成立しません。ですからB5のセルにはfalseと表示されます。

or関数は、

OR(論理式 1, [論理式 2], …)
いずれかの引数が TRUE のとき、TRUE を返します。引数がすべて FALSE である場合は、FALSE を返します。

以上エクセルのヘルプから引用

=or(B2=”男”,B3=”男”,B4=”男”)

とするとB2かB3かB4のどれかが男だったら真になるのでtrueを返します。

以前のif関数の合否の出し方でand関数を使ってみます。

A B C
1 国語 合否
2 田中 88
3 吉田 85
4 山本 69
5 吉村 92

合否の列で80点以上で90点未満は『良』そうでなければ『不明』と表示させるif関数を作成する場合、セルC2に入力する数式は

=if(B2<90,if(B2>=80,”良”,”不明”),”不明”)

if関数をネストさせて、まずセルB2が90未満かどうかの論理式を作成し真の場合はさらにセルB2の値が80以上かどうかの論理式を作成し真の場合は『良』そうでなければ『不明』とし、B2が90未満でなければここも『不明』(ここは『優』としてもかまわないが)とする。

and関数を論理式に当てはめると

=if(and(B2<90,B2>=80),”良”,”不明”)

論理式のand関数でセルB2の値が90未満、セルB2の値が80以上、という2つの条件を両方満たすか(すべての引数がTRUEか)?を設定し、trueなら『良』、falseなら『不明』という書き方ができます。

論理式の結果はtrueかfalseのどちらか一方の値を必ず取ります。どちらでもないはありません。また、tureとfalseは文字ですが値としてみなすことができます。

trueは1(イチ)、falseは0(ゼロ)です。(ゼロ以外はtrueとみなすことも可能です。)vlookup関数でVLOOKUP(検索値, 範囲, 列番号, [検索の型])の検索の型にはtrueかfalseを入れるのですが、falseの代わりに0(ゼロ)を入れることもできたりします。

意味はありませんが

=TRUE+TRUE

は2になります。ただし、関数の中のtrue、falseは数値ではなく真偽値として扱われるようで計算対象にはなりません。

IF関数 if関数のネスト

if関数で条件(論理式)により答えを分岐させるのですが分岐が2つ以上ある場合について説明します。基本はif関数を参照してください。

たとえば

A B C
1 国語 合否
2 田中 88
3 吉田 85
4 山本 69
5 吉村 92

国語の点数が90点以上は『優』90点未満80点以上は『良』80点未満は『不可』とCのセルに表示したい場合などです。

この場合はIF関数は

IF(論理式, [真の場合], [偽の場合])

なので真の場合もしくは偽の場合に再度if関数を入れてあげれば解決します。関数の中に同じ関数を入れるのをネスト(入れ子)といいます。

2行目のC列に、点数が90点以上かどうかで真か偽に分岐させます。真の場合は『優』にします。

=if(B2>=90,”優”,[偽の場合])

偽の場合、90点未満なのは確定していますが、80点以上は『良』、そうでなければ『不可』の式をを考えます。。

if(B2>=80,”良”,”不可”)

この式をそのまま[偽の場合]に入れてあげれば完成です。

=IF(B2>=90,”優”,IF(B2>=80,”良”,”不可”))

では、上記の例でもう一つ分岐を増やして70点以上を『可』70点未満を『不可』にする場合はどうでしょうか。先ほどの式の”不可”のところを

if(B2>=70,””可,”不可”)

に変更して

=IF(B2>=90,”優”,IF(B2>=80,”良”,IF(B2>=70,”可”,”不可”)))

としてあげれば4つの分岐も解決します。excel2003は最大7つまでif関数をネストすることが可能です。excel2013は64個のネストが可能です。また、if関数で別解もあります。例えば、『不可』から先に判別していく方法です。

=IF(B2<70,”不可”,IF(B2<80,”可”,IF(B2<90,”良”,”優”)))

も同じことになります。それ以外にも4つの成績区分は90点、80点、70点の3つで判定されるので80点以上は『優』か『良』、80点未満は『可』か『不可』なのでまず、80点以上かどうかで判定する方法もあります。

=IF(B2>=80,IF(B2>=90,”優”,”良”),IF(B2>=70,”可”,”不可”))

なども考えられます。

関数ダイアログボックスで関数をネストする時の注意点がいくつかありますのでご紹介します。

数式を入力するセルを選択し関数の挿入のボタン(fx)をクリックします。日本語の文字以外は半角の英数なので日本語入力はオフにしておきます。

if_3

ifを選択しOKをクリックします。

カーソルのあるところにセル参照や、数値文字などを入れます。セルはキーボードからセル番地を入力しなくても、クリックやドラッグで入力することができます。

if_2

また、文字列は自動でダブルクォーテーション(”)で囲まれる場合もありますが、自動でダブルクォーテーション(”)で囲まれない場合は自分で手入力する必要があります。真の場合に入力した、『優』という文字は偽の場合にカーソルを移動(偽の場合の入力欄をクリック)したら自動でダブルクォーテーション(”)で囲まれました。

偽の場合が単に『良』などの文字列だけなら文字を入力しOKボタンで完了です。(良は自動でダブルクォーテーションで囲まれます。)

今回は偽の場合に再度if関数を入れるのでもう一度ifの関数のダイアログボックスを表示したいのですが関数の挿入のボタン(fx)をクリックすると関数のダイアログが終了してしまいます。

偽の場合にカーソルを移動(クリック)します。数式バーの左の名前ボックスの右の▼三角をクリックすると最近使った関数が表示されますのでifをクリックします。

if_4

すると新しくifの関数のダイアログボックスが表示されます。これは偽の場合に入るif関数のダイアログです。

if_5

偽の場合に再度if関数をネストする場合はもう一度同じことを繰り返してください。『良』で終わりならOKボタンをクリックします。(自動でダブルクォーテーションで囲まれます。)

=IF(B2>=80,IF(B2>=90,”優”,”良”),IF(B2>=70,”可”,”不可”))

のように真にも偽にもif関数が入っている場合どちらかのif関数が終わったら戻ってきてもう一方にif関数を入れなければなりません。

まず最初の条件としてセルB2の値が80点以上かどうかの論理式を入れます。

if_6

次に真の場合の中にセルB2の値が90点以上なら『優』そうでないなら『良』というif関数を作ってネストします。真の場合のボックスにカーソルを移動し名前ボックスからifをクリックします。論理式と真の場合、偽の場合にそれぞれ入力します。

次に最初のif関数のダイアログボックスに戻らなければなりません。最初のif関数の真の場合しか完成していません。偽の場合のif関数も入れなければ終われないです。戻り方は数式バーの中の戻りたい関数名をクリックします。今回はイコール=のすく右のifという文字をクリックします。

if_7

初めのif関数のダイアログボックスに戻ってきたのですが、真の場合のボックスのすぐ右に赤字で#nameとエラーが表示されています。今回は『良』が自動で自動でダブルクォーテーションで囲まれていません。ですから戻る前にダブルクォーテーションで囲ってあげるか今手入力でダブルクォーテーションで囲みます。(日本語入力をオフにするのを忘れないように。)

if_8

同様に偽の場合もif関数を入れて戻ってきます。(今回は戻ってこなくても完成ですので偽の場合の中のif関数のダイアログボックスでOKボタンで終了してもかまいません。)

if_9

偽の場合の『不可』がダブルクォーテーションで囲まれていませんが、エラーが表示されていません。数式を入力しているC2のセルは、『良』が表示され、偽の場合の『不可』に該当しません。この数式を入れたB2のセルではエラーが表示されません。このままドラッグしてコピーするとC4のセルは『不可』なのでエラーになってしまいます。文字はダブルクォーテーションで囲むのを忘れないようにしてください。

if_10

 

 

IF関数

条件(論理式)により答えを分岐させる場合にたいへん重宝する関数です。

例えば、成績表で80点以上なら合格、80点未満なら不合格とするだとか、年齢が20歳以上は成人、20歳未満は未成年とするなど、ある値を基準に何かの条件(論理式)を付けて、A(合格)かB(不合格)なのかどちらかの結果を表示することが可能です。

if関数

IF(論理式, [真の場合], [偽の場合])

論理式は通常比較演算子を使って表します。

論理式内では以下の比較演算子を使用して条件を指定します。

= (等号) 左辺と右辺が等しい A1=B1
> (~より大きい) 左辺が右辺よりも大きい A1>B1
< (~より小さい) 左辺が右辺よりも小さい A1<B1
>= (~以上) 左辺が右辺以上である A1>=B1
<= (~以下) 左辺が右辺以下である A1<=B1
<> (不等号) 左辺と右辺が等しくない A1<>B1

真の場合、偽の場合は文字列でもセル参照でも数式でも構いません。

たとえば

A B C
1 国語 合否
2 田中 88
3 吉田 85
4 山本 69

セルC3に国語の点数が80点以上だったら合格80点未満だったら不合格としたい場合にはC3のセルに『=if(C3>=89,”合格”,”不合格”)』という数式を入れると『C3>=89』という論理式はC3の値は88なので論理式は成立し真となります。真の場合が実行されるので『合格』と表示されます。

if

あとはC3のセルをオートフィルでコピーしておけば完成です。

応用としてましては合格点を変更した場合や、合格、不合格の表示を変更したい場合に対応できるようにしておけば変更に強い数式になります。

合格点が、86点に変更された場合や、『不合格』を『再テスト』に変更する場合すうしき自体を変更してもかまいませんが、ミスの発生の可能性が上がります。

合格点と合否の文字を別のセルに入力しておいて絶対参照すれば変更にも簡単に対応できます。

セルB7に合格点(今回は86点)A8に『合格』A9に『再テスト』と入力しておきます。セルC2の数式『=if(C3>=89,”合格”,”不合格”)』をセル参照に変更します。ただし、あとでオートフィルでコピーすることを考えて絶対参照にしておきます。『=if(C3>=$B$7,$A$8,$A$9)』とすることで今後合格点を変更する場合はセルB7の値を変更するば数式を触らなくても大丈夫です。

if_1

ランダムな並べ替え RAND 関数

並べ替えは昇順と降順が使えますが、でたらめな順で並べ替えをしたい場合は乱数を使用することで都度違う順で並べ替えることが可能です。

北から順(厳密ではありませんが)に都道府県名と県庁所在地の表があります。図は途中で切れてます。(図はExcel2013)

rand

これを並べ替えるときはA列の番号かB列の都道府県名かC列の県庁所在地です。これらで並べ替えるときには昇順か降順なのでA列の昇順か降順、B列の昇順か降順、C列の昇順か降順の6通りしかありません。

毎回違った順で並べ替えたいときはD列に毎回自動で変わる数値があれば簡単です。

RAND 関数
0 以上で 1 より小さい実数の乱数を発生させます。 ワークシートが再計算されるたびに、新しい実数の乱数が返されます。

書式
RAND()

RAND 関数の書式には引数はありません。

以上エクセルのヘルプから引用

ということでD2のセルに『=rand()』と入力しオートフィルで沖縄まで(表の最後まで)コピーしておきます。

rand_1

0より大きく1未満の数値がそれぞれのセルに表示されます。

rand_2

ほぼ同じ値は出てこないと思われますが、万が一同じ数値だとしてもランダムな並べ替え自体に影響はありませんし、並べ替えたとたんにrand関数の入っているセルの値は再計算されて違う数値になります。

rand_3

ですから毎回違う順に並べ替えられます(少ない行数では全く同じに並べ替えられる可能性も高くなりますが)。

ランダムな並べ替えを使った後元の順に戻したいときがあるかもしれませんので、ランダムな並べ替えの前に、今回のようにA列などに先に番号を振っておけばA列基準に並べ替えれば元に戻せます。

また、乱数を表示したくない場合は列を非表示にするか、文字色を白にするかが簡単でいいと思います。(セルの書式設定の表示形式で半角のセミコロンを3回入れておく手もあります。)

関数の挿入方法

通常の計算式と同じように答えを出したいセルに入力します。(画像はexcel2013)

  1. 関数はオートサムの右の▼三角から選択する。
  2. 関数の挿入のボタンから挿入します。
  3. 名前ボックスから最近使った関数を選択(=『イコール』を入力後)
  4. 直接関数を手入力する方法もあります。

function

使い方を知っている関数は直接入力すれば候補が表示されるのでより素早く関数の入力が可能です。(excel2007より)

function_1