特別企画

表データが大きすぎて必要な情報を表示できない!「EmEditor」のフィルターを使いこなしてデータ分析の効率をアップ

フィルター機能の基礎から高度なテクニックまでを徹底解説

「EmEditor Professional」v18.0.9

 多機能性を売りにするテキストエディターは数多いが、“フィルター”機能を備えたテキストエディターは案外少ない。膨大なデータを必要な部分だけに絞り込んだり、長大なソースコードから特定のキーワードに関連した部分を抜き出したり……こうした処理は、検索機能だけでカバーするのは難しい。

 老舗の多機能テキストエディター「EmEditor Professional」は、そんなフィルター機能を完備した数少ないテキストエディターの1つだ。大文字・小文字の区別や正規表現、否定などのオプションを組み合わせた柔軟なフィルターを作成できるだけでなく、複数のフィルターを組み合わせてより高度なフィルタリング処理を実現することが可能で、データ編集の効率化が大いに期待できる。とはいえ、他のテキストエディターにはあまり搭載されていない機能ということもあり、馴染みがない、どんな機能なのかわからない、使いこなしたいがどういう場面で役に立つのかわからないというユーザーも少なくないのではないだろうか。

 そこで本企画は、「EmEditor」のフィルター機能の基本から応用までを網羅的に解説する。普段「EmEditor」でテキストファイルやソースコードを書いているユーザーはもちろん、CSVデータの分析に利用しているユーザーにも役立つ機能が満載なので、是非参考にしていただきたい。


そもそもフィルター機能とは?

 まず最初に、「EmEditor」の[フィルター]機能の基本をおさらいしておこう。すでに[フィルター]機能のことをご存知のユーザーは本項を読み飛ばし、“中級者向けのテクニック”へ進んでもよい。

 [フィルター]機能は、編集中のドキュメントを指定したキーワードで“ふるい(Filter)”にかけて、合致する行のみを表示する。[検索]機能と少し似ているが、[検索]機能はドキュメントの表示そのものには手を加えず、キーワードにマッチ(合致)する部分が選択されるのに対し、[フィルター]機能はマッチする部分のみを表示する(マッチしない部分は非表示になる)点が異なる。

編集中のドキュメントを指定したキーワードで“ふるい”にかけて、合致する行のみを表示する[フィルター]機能

 特定のキーワードに関係する部分のみをコンパクトに表示できるため、膨大なデータを分析する場合や、ドキュメントのあちこちに散らばっている情報を集約したい場合、必要な部分だけを抽出したい場合などに役立つ。

 [フィルター]機能に関連するコマンドは、[フィルター]ツールバーにまとめられている。表示されていない場合は、ツールバーを右クリックして[フィルター ツールバー]項目にチェックを入れよう。左端に“フィルター”というラベルの付いたツールバーが表示されるはずだ。

[フィルター]機能に関連するコマンドを集約した[フィルター]ツールバー

 単純にキーワードでドキュメントをフィルタリングしたい場合は、ツールバー左端のテキストボックスにキーワードを入力し、[Enter]キーを押す([最新の情報に更新]ボタンを押してもよい)。すると、キーワードにマッチする部分がオレンジ色でハイライトされ、それを含む行のみが「EmEditor」のエディター画面に表示されるのがわかるだろう。抽出された行の数は、ステータスバーで確認できる。

 逆にフィルタリングを解除したい場合は、[中止]ボタンを押せばよい。フィルターが有効かどうかは、タブに“漏斗”アイコンがあるかどうかで見分けることができる。

キーワードでドキュメントをフィルタリング。フィルターが有効かどうかは、タブに“漏斗”アイコンがあるかどうかで見分けられる

 なお、[Enter]キーや[最新の情報に更新]ボタンでフィルタリングを更新するのが面倒な場合は、[フィルター]ツールバーにある[インクリメンタル サーチ]オプションを有効にするとよい。わざわざ[Enter]キーを押さなくても、キーワードの入力に応じてフィルタリングが更新される。

 また、フィルタリング中のドキュメントを編集することは可能だが、改行などを加えることはできない。これはドキュメントを壊してしまわないようにとの配慮からだが、あえて編集したい場合は[複数行の編集をブロック]オプションを無効化するとよい。編集後は再び有効化するのを忘れないようにしよう。

誤編集を防止する[複数行の編集をブロック]オプション

 さて、以上が基本的な使い方だが、少し慣れてきたら[インクリメンタル サーチ]の隣にあるオプション群もぜひ使いこなしてほしい。

[大文字と小文字を区別する]オプション

 有効化されていると、“EmEditor”と“emeditor”はマッチしなくなる(同じものとみなされなくなる)。多少の表記ゆれを許容したい場合や、BASIC言語のような大文字と小文字を区別しないプログラミング言語のソースコードを扱う場合は無効化することになるだろう。それ以外の場合は有効化しておいて問題ない。

サンプルテキスト
[大文字と小文字を区別する]オプションを有効にしてサンプルテキストを“Editor”でフィルタリング
[大文字と小文字を区別する]オプションを無効にしてサンプルテキストを“Editor”でフィルタリング

[単語のみを検索]オプション

 主に英語のキーワードを利用する場合に利用するオプションで、有効であれば、空白文字に囲まれた“単語”がキーワードと完全に一致する場合にのみ、マッチが成立する。たとえば“Editor”でフィルタリングするした場合、“EmEditor”にはマッチしないが、“Em Editor”にはマッチする。

[単語のみを検索]オプションを無効にしてサンプルテキストを“Editor”でフィルタリング
[単語のみを検索]オプションを有効にしてサンプルテキストを“Editor”でフィルタリング

[正規表現を使用する]オプション

 フィルターのキーワードで正規表現を利用できるようにするオプション。たとえば、[正規表現を使用する]オプションを有効化してキーワード“^#”を指定するとRubyのソースコードに含まれている行コメントだけを抽出できる。

元のソースコード(Ruby)
キーワード“^#”を指定するとRubyのソースコードに含まれている行コメントだけを抽出できる

 正規表現は非常に強力だが、本稿では紙幅の関係で割愛する。以前「EmEditor」を題材にした入門記事を掲載しているので、そちらを参考にしてほしい。

 なお、「EmEditor」v15.7以降では正規表現エンジンとして“Boost.Regex”の代わりに“Onigmo(鬼雲)”が選べる。機能が豊富なうえ、状況によっては“Boost.Regex”よりも高いパフォーマンスを示す場合もあるので、正規表現を多用する場合は利用を検討してもよいだろう。

[エスケープ シーケンスを利用する]オプション

 “エスケープ シーケンス”とは、改行やタブなど、通常の文字列では表せない文字を表現する仕組みだ。このオプションを有効化すれば、改行は“¥n”、タブは“¥t”で表現することができる。[正規表現を使用する]オプションとは併用できないため、正規表現を使うほどでもないが、改行やタブをフィルタリング条件に利用したいという場合に利用しよう。

 なお、[正規表現を使用する]オプションと[エスケープ シーケンスを利用する]オプションが有効化されている場合は、キーワードの編集ボックスの右側にある[>>]ボタンから簡易ヘルプを参照することが可能。正規表現の書き方が思い出せない場合の助けになる。

正規表現とエスケープ シーケンスの簡易ヘルプ

[否定]オプション

 キーワードにマッチ“しない”行だけをフィルタリングするオプション。たとえば、[正規表現を使用する]オプションを有効化してキーワード“^#”を指定するとRubyのソースコードに含まれている行コメントだけを抽出できるが、さらに[否定]オプションを有効化すれば、行コメントを取り払ったソースコードが得られる。

元のソースコード(Ruby)
前述のサンプルで[否定]オプションを有効化すれば、行コメントを取り払ったソースコードが得られる


中級者向けのテクニック

選択文字列の右クリックメニューからすばやくフィルタリング

 さて、ここまでは[フィルター]機能の基本、ツールバーのテキストボックスを利用する方法を紹介してきた。しかし、ちょっとした用事であれば、なにもツールバーを利用するまでもない。選択テキストを右クリックして[フィルター]メニューを選択すれば、当該テキストを利用したフィルタリングが可能。

選択テキストを右クリックして[フィルター]メニューを選択
当該テキストを利用したフィルタリングが可能

 また、[フィルターで除外]メニューを選べば、そのテキストを含まない行のみを表示させることもできる。これはツールバーにキーワードを入力して、[否定]オプションを利用した時と同じ動作だ。

マッチする行の前後の行を含める

 [フィルター]機能でフィルタリング表示されるのは、原則としてキーワードにマッチした行だけだ。しかし、場合によってはその前後も確認したい場合もあるだろう。たとえば、ソースコードを絞り込んだ場合は、その文脈を把握するために前後の数行を表示できた方がよい。

 そのような場合は、[フィルター]ツールバー右端にある2つのプルダウンを利用する。たとえば左側のプルダウンで“2”を指定すると、マッチする行に加え、その前2行も表示されるようになる。後ろ3行を表示したい場合は、右側のプルダウンを“3”にセットすればよい。

[フィルター]ツールバー右端にある2つのプルダウンを操作して、マッチする前後行も表示されるようにする

 この機能は、定型テキストを加工する場合にも役立つことがある。たとえば、WebページのタイトルとURLを記したメモが手元にあり、そこからHTTPSページだけを抽出するケースを考えてみよう。このメモではタイトルとURLが改行で区切られているため、単純に“https://”でフィルタリングしてしまうと、タイトルが抜け落ちてしまう。タイトルとURLの対を得るにはどうすればよいだろうか。

サンプルデータ
単純に“https://”でフィルタリングした場合

 そのような場合は、左側のプルダウンを“1”にしてみよう。マッチする行の上の行が残るため、タイトルを残すことができる。

前の1行も表示するように設定すると、意図したデータが得られる

CSVファイルを絞り込む

 「EmEditor」はCSVデータの処理にも長じたアプリだが、[フィルター]機能にもCSVデータを扱う際に役立つ機能が備わっている。

 [フィルター]機能におけるマッチの基準は、原則として“行単位(全体)”だ。しかし、CSVデータを扱っている場合(CSVモード)の場合は、“カラム(列、フィールド)単位”でマッチさせることができる。

 たとえば、顧客データから“長野”さんを抽出したい場合、行単位のフィルタリングで地名の“長野”を除外するのは困難だ。

サンプルデータ(データはツールを使って作成したダミー)
単純に“長野”でフィルターをかけてしまうと、氏名の“長野”だけでなく、地名の“長野”まで拾ってしまう

 しかし、CSVモードでデータを開き、“住所”フィールドの“長野”を無視して、“氏名”フィールドの“長野”だけをマッチするように構成すれば、“長野”という名前をもつ顧客だけを抽出できる。

“氏名”フィールドの“長野”だけをマッチするように設定した結果

 特定のカラム(フィールド)だけをマッチの対象とする場合は、[フィルター]ツールバーのプルダウン(既定値は“行全体”)を利用する。CSVモードであればカラムが選択できるようになっているはずなので、目的のカラムを選択しよう。

フィルタリングした行を新規ファイルに

 [フィルター]機能は、膨大なデータから必要な行のみを抽出したい場合に便利な機能だ。抽出した結果を新規ドキュメントとして扱いたい場合は、全選択([Ctrl]+[A])して新規タブ([Ctrl]+[N])に貼り付け([Ctrl]+[V])ればよいが、これらの処理は[フィルター]ツールバーの[すべて抽出]コマンドを利用すればワンクリックで実現できる。「EmEditor」でテキストデータを扱うことが多い場合は、覚えておくとよいだろう。

[フィルター]ツールバーの[すべて抽出]コマンドを利用すればワンクリックでフィルター結果を新規ドキュメントへ抽出できる


複数の条件を組み合わせたフィルタリング

 さらに、「EmEditor」では複数のフィルターを組み合わせることができる。これが必要になることがあまりないかもしれないが、覚えておくといざというときに役立つ。

 複数のフィルターを組み合わせるには、[フィルター]ツールバーにある[高度なフィルター]ボタンを押す。すると[高度なフィルター]ダイアログがあらわれ、フィルター条件を複数登録できるようになる。

[フィルター]ツールバーにある[高度なフィルター]ボタンを押すと[高度なフィルター]ダイアログへアクセスできる

 たとえば、顧客データから“奈良県”と“和歌山県”のユーザーのみを抽出する場合、“住所”フィールドを正規表現でフィルターするという先ほど紹介したテクニックが使える。しかし、“大阪府”のユーザーも一緒に抽出したくなったり、“近畿地方”のユーザーを抽出しなければならなくなったとしたら……正規表現が非常に複雑になってしまうだろう。

サンプルデータ(データはツールを使って作成したダミー)
“住所”フィールドを正規表現でフィルターして、“奈良県”と“和歌山県”のユーザーのみを抽出。しかし、“近畿地方”のユーザーを抽出しなければならなくなったとしたら……?

 しかし、[高度なフィルター]ダイアログを使えば“奈良県”の住所フィルター、“和歌山県”の住所フィルター、“大阪府”の住所フィルターと、条件を足していくだけで対応できる。ただし、初期状態の場合、これらの条件は“かつ(AND:論理積)”で結ばれるので注意。“奈良県または和歌山県”という条件を指定したい場合は、“または(OR:論理和)”オプションを有効化しなければならない点には注意しよう。

[高度なフィルター]ダイアログで“近畿地方”在住の顧客だけを抽出した例

 [高度なフィルター]ダイアログの活用方法は、これだけにとどまらない。たとえば、先ほどの住所フィルターに合致するユーザーの中から、さらに“女性”の顧客のみを抽出したいという場合を考えてみよう。もはや行全体を正規表現でフィルタリングするだけでは不可能なほど複雑になってしまったが、[高度なフィルター]ダイアログならば、性別フィールドを“女”でフィルターする条件を“AND”で追加するだけでよい。

さらに女性の顧客に絞り込んだ例

 このように条件を追加していけば、“大阪市を除く大阪府下”や“近畿地方(紀南地方を除くが嶺南地方は含める)”といった複雑なフィルタリングも不可能ではないだろう。

【コラム】マクロを使って“高度なフィルター”機能をすばやく利用できるようにする

 [高度なフィルター]ダイアログは非常に強力だが、毎回ダイアログを開いてフィルター条件を複数登録しなければならないのは少し面倒だ。

 その場合は、以下のようなマクロを記述するとよい。

document.Filter(document.selection.Text,0,eeFindReplaceCase | eeFindKeepPrevious,0,0);

 テキストを選択してマクロを実行すれば、選択テキストでドキュメントをフィルタリングすることが可能。複数回利用して、フィルタリングを2重、3重にかけることもできる。選択テキストによるフィルタリングしか使わない、“かつ(AND:論理積)”による連結で十分という場合には、わざわざ[高度なフィルター]ダイアログを開かなくても複数の条件を適用できて便利だ。

 「EmEditor」マクロ機能に関しては以前掲載した以下の記事を参考にしてほしい。


まとめ

 フィルター機能の醍醐味は、膨大なデータから必要なデータを絞り込み・抽出して、瞬時にまとめられる点だ。検索機能などで代用できないこともないが、「EmEditor」ならば[インクリメンタル サーチ]オプションで入力に応じたフィルタリング結果をリアルタイムで得ることができる。気が向いたときに気軽に使えるのは大きな魅力といえるだろう。

 また、複数のフィルター条件を組み合わせられる[高度なフィルター]機能は、CSVデータの加工にも最適だ。複雑な正規表現を組むよりも、単純なフィルターをいくつか組み合わせた方が簡単かつ直感的に意図したデータを抽出できることもあるので、状況によってうまく使い分けたい。

[制作協力:Emurasoft, Inc.]