3つ以上の条件で不要な行を削除したいときはどうする?|脱Excel プログラミング

脱Excel プログラミング 脱Excel

表計算で不要な行を削除するときに、2つまでの条件であればExcelのフィルター機能で楽にできます。しかし、3つ以上の条件になったときにはExcelでは簡単にできなくなります。MATLABプログラミングで3つ以上のフィルター条件で不要な行の削除を簡単に行う方法を説明します。

スポンサーリンク

Excelで楽にフィルターできるのは条件2つまで?

仕事でExcelを使っている人は、フィルター機能を頻繁につかうことでしょう。

Excelでのフィルターは、「ホーム」から、「並べ替えとフィルター」アイコンをクリックし、フィルター設定で、2つまでの条件を「および(AND)」もしくは「または(OR)」演算で入れることができます。

Excelでのフィルター Excelでのフィルター設定

では、フィルター条件が3つ以上あるときはどうしたらよいでしょうか?

例えば、以下のように多数のEmailが入った表 ”ListA”があるとします。

サンプルEmailリスト

このリストから、”@pmail.com”、”@smail.com”、”@tmail.com”を含む行だけを削除したいと考えています。

これをExcelでやろうとするとどのようにすればよいでしょうか?

最初に ”@pmail.com”、”@smail.com”を含む行を削除して、そのあとで”@tmail.com”を含む行を削除して、と2段階に分けて行う方法があります。

しかし、除外条件の数が増えてきたときには、この作業はかなり面倒です。できれば一発で指定した条件の行は削除したいところです。

また、Microsoft公式サポートにも以下のような記事が掲載されていますが、「高度なフィルター」や「詳細設定」がうまく機能しませんでした。(もしかするとやり方を間違った可能性もありますが)

高度な条件を使ってフィルターを適用する

そこで、この作業をMATLABで簡単にできるか調べてみることにしました。

ChatGPTを使ってプログラミング

前回の記事同様にMATLABでプログラムが簡単に書けるか試したいのですが、今回のタスクは少々複雑です。そこで生成AI 「ChatGPT」を使ってサンプルプログラムを書いてもらえないか試してみます。

ChatGPTで以下のようなプロンプトを入力してみます。

サンプルプロンプト1

以下のように非常に短い行で回答が返ってきました。最初の3行は、サンプルの表を定義しているだけなので、実質的には6行目の”exclude_conditions = …” 以下の4行です。(%でコメントアウトされた行を除く)

解答例

さて、この比較的短い行で本当に機能するのでしょうか?実際のListAを読み込むようにプログラムを書き換えてMATLABで実行してみます。

MATLABでのコード実行

結果は以下のようになりました。左が元のListA、右がプログラム実行後 不要な行が削除されたリストです。期待通りの動作をしてくれているようです。

プログラム実行前 プログラム実行後
プログラム実行前のListA プログラム実行後のリスト

ただ、このまま使うだけでは 実際何をしているかわかりませんし、本当に正しく動いているのか確認できません。このままでは気持ち悪いので、次の章で一行ずつ解説していきます。

MATLABのコマンド解説

numel関数は、表の行数をカウントする目的で使われていますが、本来は表のすべてのセルの数をて数えてしまいます。この場合は 1列n行の表なので、(行の数)=(セルの数)となり問題ありませんが、mxn列の表の場合は =(行の数)となりません。行の数を数えるのであれば、height関数 を使うほうが適切でしょう。

参考)列の数を数えるには width 関数 を使います。

その他にこのプログラムで使われているのは、MATLABのcontains 関数です。サポートページには以下のように書かれています。

TF = contains(str,pat) は、str に指定されたパターンが含まれる場合に 1 (true) を返し、それ以外の場合に 0 (false) を返します。

これだけだと、何をしているのかわかりにくいのですが、少ないコマンド行で複雑な操作ができる裏には、MATLAB特有の行列をまとめて操作できる機能が関係しています。

プログラムの10行目のコマンドがこのタスクの主要部分です。

ListA = ListA(~contains(ListA.Email, exclusion_conditions{i}), :);

表の中の一部の固まりをまとめて操作できるMATLAB特有の機能については次の記事で詳しく解説します。

MATLABの得意な行列の操作 文字列編|脱Excel プログラミング

 

脱Excel
スポンサーリンク