目次
セル内のすべてのスペースを削除したり、複数のスペースを1文字に置き換えたり、数字と数字の間のスペースだけを切り取ったり、効果的な方法で空白を処理したい場合は、正規表現を使用します。
どのような入力データであっても、空白のないデータセットに出会うことはほとんどありません。 ほとんどの場合、空白は良いものです。異なる情報を視覚的に分離して認識しやすくするために使用します。 しかし、状況によっては、空白が悪になることがあります。空白があると数式が混乱し、ワークシートがほとんど管理できなくなることがあるからです。
なぜExcelで正規表現を使って空白をトリミングするのですか?
正規表現を使ってExcelワークシートの空白を除去する細かい作業に入る前に、まず最初に思い浮かぶ疑問を解決したいと思います。ExcelにはすでにTRIM関数があるのに、なぜ正規表現が必要なのでしょうか?
この違いを理解するために、それぞれのケースで何が空白とみなされるかを見てみましょう。
- 内蔵のTRIM関数では くうはくもじ 7ビットASCIIシステムで値32を持つ。
- 正規表現では、スペース( )、タブ( \t )、キャリッジリターン( \r )、改行( \n )などの空白を識別できます。 くうはくもじ (これらの種類に対応した「FUJIFILM®」は、生入力データのクリーニングに威力を発揮します。
裏側を正確に把握することで、解決策を考えやすくなりますよね?
Excelで正規表現を有効にする方法
Excelが正規表現をサポートしていないことはよく知られています。 正規表現を有効にするには、カスタムVBA関数を作成する必要があります。 幸いにも、私たちはすでに RegExpReplace Excel言語では、removeは「空の文字列に置き換える」という意味の単語です。)
Excelに関数を追加するには、このページからコードをコピーし、VBAエディタに貼り付けて、ファイルを マクロ可能なワークブック (.xlsm)です。
参考までに、この関数のシンタックスを紹介します。
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])最初の3つの引数は必須で、最後の2つはオプションである。
どこで
- テキスト - 検索対象となる元の文字列。
- パターン - 検索する正規表現を指定します。
- 交換 - に置き換えるテキストです。 取り除く ホワイトスペース のどちらかに設定します。
- 空の文字列 ("") を使用すると、すべてのスペースを完全に削除することができます。
- 空間 せいかく (" ") で複数の空白文字を1つの空白文字に置き換えます。
- インスタンス番号 (オプション) - インスタンス番号。 ほとんどの場合、すべてのインスタンスを置き換えるためにこれを省略します (デフォルト)。
- マッチケース (オプション) - テキストの大文字小文字を一致させる (TRUE) か無視する (FALSE) かを示すブール値。 ホワイトスペースについては、無関係なので省略します。
詳しくは、RegExpReplace関数をご覧ください。
正規表現でホワイトスペースを除去する方法 - サンプル
RegExpReplace関数がワークブックに追加されたので、さまざまなシナリオに1つずつ取り組んでみましょう。
正規表現を用いてすべての空白文字を削除する
文字列中のすべてのスペースを削除するには、スペース、タブ、キャリッジリターン、ラインフィードなどの空白文字を検索し、空文字列("")に置き換えるだけです。
パターン : \s+
交換 : ""
ソース文字列がA5にあると仮定すると、B5の式はこうなる。
=RegExpReplace(A5, "\s+", "")
パターンの管理を容易にするために、あらかじめ定義されたセルに正規表現を入力し、それを$A$2のような絶対参照を使って数式に供給すると、数式を列の下にコピーしてもセルのアドレスは変更されないままです。
=RegExpReplace(A5, $A$2, "")
複数の空白を削除する
削除するには 余計な空白 (つまり、1つ以上の連続したスペース)の場合、同じ正規表現 \s+ を使用しますが、見つかったマッチをスペース1文字に置き換えます。
パターン : \s+
交換 : " "
=RegExpReplace(A5, "\s+", " ")
この式では、単語間だけでなく、文字列の先頭と末尾にも空白が1文字入ることに注意してください。 先頭と末尾の空白を取り除くには、上記の式を別の RegExpReplace 関数にネストして、先頭と末尾の空白を取り除きます。
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+")
先頭と末尾の空白を削除する正規表現
行頭や行末の空白を検索するには、開始^と終了$のアンカーを使用します。
リーディング の空白を削除します。
パターン : ^[\s]+
トレーリング の空白を削除します。
パターン : [\s]+$
リーディング と 後追い の空白を削除します。
パターン : ^[\s]+
どちらの正規表現を選んでも、マッチした部分を何もない状態に置き換えます。
交換 : ""
例えば、A5の文字列の先頭と末尾のスペースをすべて消すには、次のような式になります。
=RegExpReplace(A5, "^[\s]+])
下のスクリーンショットのように、先頭と末尾の空白だけを取り除き、単語間の空白はそのままにして、読者の目に美しく見えるようにします。
余分な空白を削除し、改行を維持する
複数行の文字列を扱う場合、余分なスペースを削除して改行を維持したい場合があります。 この場合、空白文字[ ]またはスペースとタブ[ \t ]を検索します。 後者は、ソースデータをテキストエディタなどの別のソースからインポートする場合に便利です。
以下のデータセットで、複数の行をそのままにして、すべての先頭/末尾のスペースと、1つのスペースを除くすべての中間スペースをトリミングしたいとします。 このタスクを実行するには、2つの異なる RegExpReplace 関数が必要です。
最初の機能は、複数の空白文字を1つの空白文字に置き換えるものである。
=RegExpReplace(A5, " +", " ")
もう1つは、行頭と行末のスペースを取り除くものです。
=RegExpReplace(A5, "^ +")
2つの関数を1つずつ入れ子にするだけです。
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +")
そして、完璧な仕上がりを得ることができるのです。
複数のスペースを1文字に置き換える正規表現
文字列からすべてのスペースを削除し、連続したスペースの各グループを特定の文字に置き換えたい場合、次のようにします。
まず、この正規表現を使って、先頭と末尾の空白を切り詰めます。
=RegExpReplace(A8, "^[\s]+])
そして、上記の機能を テキスト 引数で、1つ以上の連続した空白文字を指定した文字(ハイフンなど)に置き換える別のRegExpReplaceの引数を指定します。
パターン : \s+
交換 : -
ソース文字列がA8にあると仮定すると、式はこのような形になる。
=RegExpReplace(RegExpReplace(A8, "^[\s]+])
また、スクリーンショットに示すように、パターンと置換を別々のセルに入力することも可能です。
空行を削除する正規表現
1つのセルに複数の行があるユーザーからよく聞かれる質問です。「セル内に空白行がたくさんありますが、各セルを調べて手動で行を削除する以外に方法はありますか? 答え:それは簡単です。
現在の行の先頭 ^ から次の行 \n までの1文字もない空行にマッチさせるには、正規表現が
パターン : ^\n
視覚的な空白行にスペースやタブが含まれる場合は、この正規表現を使用します。
パターン : ^[\t ]*n
この式を使って正規表現を空文字列に置き換えるだけで、すべての空白行が一度に消えます。
=RegExpReplace(A5, $A$2, "")
RegExツールで空白を削除する
上記の例では、正規表現が提供する素晴らしい可能性のほんの一部を示しました。 残念ながら、古典的な正規表現のすべての機能がVBAで利用できるわけではありません。
幸い、Ultimate Suiteに含まれるRegEx Toolsは、Microsoftの.NET RegExエンジンで処理されるため、これらの制限から解放されます。 これにより、VBA RegExpではサポートされていない、より高度なパターンを構築できます。 以下に、そのような正規表現の例を示します。
数字と数字の間のスペースを除去する正規表現
英数字の文字列で、数字と数字の間だけ空白を取り除きたい場合、「A 1 2 B」のような文字列は「A 12 B」となる。
任意の2桁の数字の間にある空白にマッチさせるには、以下のルックアラウンドを使用することができます。
パターン : (?<=d)♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪~
上記の正規表現をもとに数式を作成するには、以下の2つのステップを簡単に実行することができます。
- について エイブルビットのデータ タブで テキスト グループをクリックします。 Regexツール .
- について Regexツール ペインでソースデータを選択し、正規表現を入力し、その上で 削除 オプションを選択し 削除 .
結果を値ではなく、数式として取得するためには、忘れずに 数式として挿入する のチェックボックスにチェックを入れます。
一瞬で AblebitsRegexRemove 関数が元のデータの右側に新しい列で挿入されます。
また、A5 などのセルに正規表現を入力し、その数式を直接セルに挿入するには インサート機能 ダイアログボックスで AblebitsRegexRemove は以下に分類されます。 AblebitsUDFs .
この関数は文字列の削除に特化しているため、入力文字列と正規表現の2つの引数のみを必要とします。
=AblebitsRegexRemove(A5, $A$2)
以上、Excelで正規表現を使ってスペースを削除する方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
ダウンロード可能なもの
正規表現による空白文字の除去 - 例 (.xlsmファイル)
Ultimate Suite - 体験版 (.exeファイル)