TAKE 関数 / DROP 関数


ここで解説する TAKE関数 と DROP関数 は、ProPlusに追加された関数です。Excel 2016/2019/2021では使用できませんのでご注意ください。また、本稿執筆時点(2022/3/20)では、まだInSider Programに実装されただけですので、製品版で使えるようになるには、まだ少し時間がかかると思います。なお、この関数については、YouTubeの動画でも解説しています。ぜひ、ご覧ください。また、この関数では「スピル」という機能が使われています。スピルに関しては「Excel 2016レビュー[Excelの使い方が激変する「スピル」]」をご覧ください。

TAKE 関数 / DROP 関数

今回追加された11個の「配列操作系関数」の中で、このTAKE関数とDROP関数が最も「使う場面が思いつかない」関数でした。いや、動作は単純です。でも、これって、実務の現場でどんなときに便利なんだろう。まぁ、とりあえず動作をご覧ください。

【TAKE関数】

【DROP関数】

では、さっそく引数のご紹介です。

TAKE(array,rows,columns)
DROP(array,rows,columns)
TAKE(配列,行数,列数)
DROP(配列,行数,列数)

「array」は、とりあえずそのまま「配列」としましたが、イメージとしては「セル範囲または配列」です。もし、配列という言葉を見ただけで気分が悪くなったり、身体中が痒くなるような方は、シート上の"セル範囲"または"表"、"リスト"、"テーブル"などを想像してください。省略できない必須の引数は、この「配列」と、続く引数「行数」または引数「列数」の、どちらか一方です。引数「行数」と引数「列数」を両方同時に指定することも可能です。

TAKE関数は、指定した「配列」から、指定した「行数」や「列数」を抽出する(取り出す)関数です。一方のDROP関数は、指定した「配列」から、指定した「行数」や「列数」を除外して(落として)、残りの部分を返す関数です。いくつかの例をお見せしますので、どの引数に、どんな数を指定すると、どうなるのかを理解してください。

引数「行数」と引数「列数」は、少なくともどちらか一方を指定しますが、両方指定することもできます。引数を省略すると、いずれも「すべての行/列」を返します。引数に、実際に存在する数を"超える数"を指定してもエラーになりません。その場合も「すべての行/列」を返します。

DROP関数も基本的には同じです。こちらは「削除する(取り除く)」行や列の数を指定します。引数を省略すると「すべての行/列」とみなされます。TAKE関数と違うのは、実際に存在する数を"超える数"を引数に指定すると、エラーになります。

さて、ここからがちょっとややこしいのですが、どちらの関数も、引数「行数」と引数「列数」に"マイナス(負)の数"を指定できます。正の数を指定したときと、負の数を指定したときの両方をお見せします。

引数に"マイナス(負)の数"を指定すると、列の場合は、右方向からカウントします。これは、行も一緒です。

行を取り出すときも同じで、負の数を指定すると、下からカウントします。「TAKE(Data,-1,-1)」で、常に"右下のセル"を参照できるのは、ちょっと便利かもって思いました。DROP関数の引数にも負の数を指定できます。こちらは、削除する(除外する)行や列を、反対方向からカウントします。

雑感

大量のデータが入力されている大きいリストから、特定の部分だけを取り出したいというニーズは多いです。TAKE関数は「欲しい部分だけを取り出す」という考え方で、一方のDROP関数は「不要な部分を除いて、残りを取り出す」という発想です。さて、その"取り出したい部分"ですが、行と列では事情が異なります。列は一般的に「この列(単一列)」「ここからここまでの列(連続した列)」「こことここの列(非連続の列)」のように決め打ちすることが多いです。対して、行を取り出すときは一般的に「何行目」のように位置を指定することは少ないです。行を位置で指定して取り出すケースでは、ときどき必要になるのが「先頭行」や「最終行」ですね。行を取り出すときって、位置で指定するよりも「○○の条件に一致する行」などのように"条件を指定する"ことが多いでしょう。そう考えると、このTAKE関数とDROP関数って、ちょっと使い道に悩みます。

列の話からいきましょうか。列を取り出すときは「この列(単一列)」「ここからここまでの列(連続してた列)」「こことここの列(非連続の列)」のようにしますが、実は今回追加された「配列操作系」の関数に、CHOOSECOLS関数があります。CHOOSECOLS関数については別のコンテンツで紹介しますけど、TAKE関数に比べて次のような違いがあります。

TAKE関数 CHOOSECOLS関数
単一列
連続した列
非連続の列 ×

CHOOSECOLS関数は、TAKE関数一発ではできない「こことここの列(非連続の列)」を取り出せます。しかも「3列目を左端にする」のように、取り出す順番も自由です。CHOOSECOLS関数で「左端から3列分」という指定はできませんが、これ要するに{1,2,3}という配列なので、SEQUENCE(1,3)でいけます。まぁ、できるっちゃできるので、ここでは△にしました。こうして見ると、どちらが簡単かは別にして、荒っぽく言えば「TAKE関数でできることは、すべてCHOOSECOLS関数でできる」といえます。だからTAKE関数なんて不要だーーとは思いません。じゃ、どんなケースでTAKE関数が便利なのか、これぞTAKE関数の独断場!という使い方が(現在の私には)思いつかないだけです。実際には「先頭列」や「右端の列」だけを取り出すのでしたらTAKE関数の方が簡単なので「まぁ、CHOOSECOLS関数でもできるけどね~」と心の中で思いながら、TAKE関数を使うかもしれません。

行を取り出す件について同様です。行は「何行目」ではなく「○○の条件に一致する行」のように取り出すことが一般的です。そうなればもう、これはFILTER関数でしょう。現在のExcelにおいて、FILTER関数の最強ぶりはチートレベルです。今回も、実用的な使い方として、TAKE関数とDROP関数が役立つ場面を考えてみましたが、そのつど「だったらFILTER関数だよなぁ~」ってなりました。もちろん、今後使い続けていく中で「これだ!」という使い方に気づくかもしれません。そのときは、また紹介します。