いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【EXCEL】乱数を発生させたい

・なんやかんややっていると、乱数を発生させたいことがある。

・乱数と一口に言っても、いろいろなパターンがあるので、EXCELでの出し方を調べてみた。

 

・一様分布の乱数を発生させたい。

⇒ rand関数を使う。rand関数(=rand())を入力すると、0~1の一様分布を返してくれる。引数はないらしい。EXCELに計算させるたびに乱数が発生するので、注意が必要。

試しに1000個乱数を発生させて、ヒストグラムを描かせてみた(下図)。

f:id:choron81:20210815233259p:plain

・確かに一様分布っぽい。

・ちなみに、特定の範囲の整数の乱数を作成したい場合は、=randbetween(最小,最大)という関数を使うことができる。

・rand()を適切に何倍かしてint関数で整数化させたり、rank関数で順位付けしたりするのも手だと思う(後者は重複しない整数の乱数を得られる)。

 

終わり。

 

 

【EXCEL】もっと便利に検索したい(index + match))

・vlookupは第四の引数にFALSEを入れて完全一致検索にした方が良いっぽい。

・vlookup関数の特徴として、検索列が返し列より左にないといけないらしい。

・調べてみると、index関数とmatch関数を組み合わせることにより、vlookup関数よりも汎用性の高い検索が可能になるっぽい。

 

・index関数

⇒ 表、行番号、列番号などを指定すると、そのセルにある中身を返してくれる関数(下図、囲んだ表の上から4行目、左から2列目なので、四郎氏が返ってくる)。

f:id:choron81:20210815220524p:plain

・match関数

⇒ 検索値と検索対象領域(一行又は一列)を指定すると、検索値が何番目にあるのか返してくれる関数(囲んだ領域の上から4番目に検索対象である1004があるので、4が返ってくる)。

f:id:choron81:20210815221350p:plain

・この二つを組み合わせると、汎用性の高いvlookupのような検索ができる(下表)。

f:id:choron81:20210815222522p:plain

 

・少し弄れば、検索対象列よりも左にある返し列から値をとってくることもできるし、横に検索することもできる。

・覚えておくときっと便利。

 

終わり

 

【EXCEL】vlookupがたまに間違える件について

EXCEL上で表を作成した際に、検索関数であるvlookupを使うことがある。

・vlookupで表を検索すると、なぜかたまに間違えることがある(下図)。

f:id:choron81:20210814235737p:plain

・会員番号1006は田中六郎氏であっている。一方で、会員番号1005は存在せず、氏名を返してはいけないのだが、田中四郎氏が返ってきている。お帰り、四郎。

・この場合は、vlookup関数に4つ目の引数を与えると良いらしい(下図)。

f:id:choron81:20210815000250p:plain

・TRUEだと、近似検索なので、ぴったり合うキーがない場合、それっぽい情報が入っているセルをヒットとして判別する。一方で、FALSEにすると完全一致検索なので、「会員番号1005なんて表中に出てこないよ!」とエラーを返してくれる。

・ちなみに、この状態でキーが重複している1007番を検索すると、TRUEとFLASEで戻り値が異なる(下図)。

f:id:choron81:20210815001926p:plain

・そもそもキーに誤りがあることが悪いのだが、しれっと戻り値を返してしまう。

・「何かエラーを返してくれるんじゃないか」と期待していると、痛い目を見る。

 

・あと、キーが順番になっていない場合にも、TRUEだと変な挙動をする(下図)。

f:id:choron81:20210815002303p:plain

・会員番号1006の田中六郎氏が登録されているにも拘わらず、TRUEでは三郎氏が返ってきてしまっている。

・まとめると、vlookup関数はデフォルト(近似検索)で使うべきではなく、第4の引数にFALSEを指定した方が良い。あと、表がダメだとエラーではなく適当にそれっぽい戻り値を返してくるので、注意が必要。

 

終わり。