Excel動的配列でスピル範囲の空白セルを除去する効果的なテクニック

ご覧いただきありがとうございます。Excelでデータを扱っていると、スピル範囲の中に見えない空白セルが混在してしまい、集計やフィルター、連結などをするときに思わぬ不具合が起きることがあります。私も以前、職場の資料作成で「絶対に空白はないはずなのに、なぜかFILTER関数で結果がおかしくなる…」という壁にぶち当たった経験があります。そのときの地味な原因がセル内の余計なスペースや改行文字でした。これを見つけるまでに何度も手動でセルを確認したり置換機能を試したりと大変な思いをしたものです。今回は、そんなスピル範囲に潜む「空白セル」にまつわる問題とその解消方法について、実体験を交えながらじっくりとお伝えします。記事の中ではExcelの動的配列を使ったテクニックも紹介しますので、同じようにお困りの方はぜひ参考にしてみてください。

Excelの動的配列でスピル範囲の空白セルを除去するメリット

Excelの動的配列機能(FILTER、SORT、UNIQUE、SEQUENCEなど)は、Office 365の比較的新しいバージョンで使えるようになったとても便利な機能です。従来は配列数式を組んだり、テーブル機能やマクロを活用したりして自力で工夫していた作業を、シンプルな関数で一気に処理できます。ただ、そのまま使うと空白に見えるセルの扱いに悩まされることがあります。特に、データに混入してしまったスペースや不可視文字によって、本来意図しない結果になりやすいのが盲点です。

手動操作の手間が減る

手元のデータが大量になると、都度手作業で空白セルを削除するのは非常に非効率です。動的配列関数が正しく機能すれば、まとめてフィルタリングしたり並べ替えたりできるため、メンテナンス時間が大きく短縮されます。

表示上のトラブルが減る

見た目が空白のセルでも、何らかの空白文字や改行コードが潜んでいる可能性は意外に高いです。これを取り除かないと、集計やVLOOKUP、XLOOKUPなどでトラブルを起こす原因になります。動的配列で空白セルをしっかり除外しておくと、表示上の誤解や余計な処理を減らすことができます。

FILTERやSORT、UNIQUEなどの動的配列関数は、一度設定してしまえば新たにデータを追加しても動的に更新される点が大きな魅力です。

スピル範囲から空白セルを除外する基本的なアプローチ

動的配列を使ってスピル範囲を出す場合、FILTER関数を利用するのが比較的簡単でわかりやすいです。最初に挙げた例として、G5:G17の範囲にデータがあり、その中で実際には空白セルが混じっている状況を想定してみましょう。

FILTER関数を利用する方法

FILTER関数は、特定の条件を満たすデータだけを抽出してスピルさせる便利な関数です。たとえば本当に空のセル(スペースも含まない)を除外するには、次のように条件を書きます。

=FILTER(G5:G17, G5:G17 <> "")

このようにすると、G5:G17の範囲で空のセルを除外してスピルさせることができます。ただし、見た目が空白でも実際にはスペースやタブ文字が入っていると、この条件では弾かれません。私も以前、職場で「書式がごちゃごちゃのデータをコピペして持ってきたら、一見同じように見える単語でも後ろにスペースや改行が混じっていた…」ということがよくありました。

TRIMやCLEAN関数を組み合わせる

セルのデータにスペースやタブ、改行コードなどが含まれていると、FILTER関数の条件式を工夫する必要があります。TRIM関数は半角スペースや両端のスペースを削除してくれますし、CLEAN関数は印刷できない制御文字などを除去してくれます。ただ、フォント依存の不可視文字や全角スペースなどを扱いたい場合は、SUBSTITUTE関数を併用するなど工夫が必要です。

TRIMやCLEAN、SUBSTITUTEを上手に使う

例えば、G5:G17のデータから余分な空白や制御文字を削除したうえで空白セルを取り除きたい場合は、次のような式を使うことがあります。

=FILTER(
    G5:G17,
    TRIM(CLEAN(SUBSTITUTE(G5:G17," ",""))) <> ""
)

ここでは、SUBSTITUTE関数で全角スペースを空文字に変換し、CLEAN関数で制御文字を削除し、TRIM関数で前後の半角スペースを取り除くという3段階の処理をしています。これによって、かなり厳密に不要な空白や制御文字を除去できるため、スピル範囲に本当に必要なデータのみを表示できます。

ある程度複雑な文字列処理をまとめて行うと、データがきれいになり集計や分析がスムーズに進むようになります。

スペースが原因でFILTERできないケースへの対処

私が直面した事例の中でも最もやっかいだったのが、セル内に混入しているスペースが全角だったりタブ文字だったりしたケースです。通常の空白文字とは違うため、”<> “””だけでは外れないという落とし穴がありました。

SUBSTITUTE関数を重ねて使う

SUBSTITUTE関数は、指定した文字列をほかの文字列に置換する関数ですが、同じ式の中に複数のSUBSTITUTEを入れ子にして使えば、半角スペースや全角スペース、タブ文字といった多様な空白文字をまとめて置換できます。

例:よく使う置換パターン

半角スペース、全角スペース、タブ文字、改行をすべて空文字に置換してしまいたいときは以下のように組み合わせることが多いです。

=SUBSTITUTE(
    SUBSTITUTE(
        SUBSTITUTE(
            SUBSTITUTE(A1, " ", ""), " ", ""
        ), CHAR(9), ""
    ), CHAR(10), ""
)

これを条件式内に組み込むと、FILTERやUNIQUEなどの動的配列関数で扱う際に不要な文字を一掃できます。

SUBSTITUTEを何重にも使うと、式が長くなりすぎて可読性が落ちてしまうデメリットがあります。

実用的な対策:LET関数を絡めて可読性を保つ

Office 365ならLET関数を使うことで、途中計算の結果に名前を付けられ、式を分割して読みやすくできます。たとえば、「tmp」という変数に置換後の文字列を格納したうえで、それをFILTERで判定するといった書き方が可能です。

=LET(
    tmp, SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(G5:G17, " ", ""), " ", ""), CHAR(9), ""), CHAR(10), ""),
    FILTER(G5:G17, tmp <> "")
)

これなら、最初にtmpでデータをきれいにしてから条件判定する流れがわかりやすく、あとから修正や見直しをする際にも非常に便利です。

TEXTJOINと再分割アプローチが上手くいかない理由

空白セルを除去する際、TEXTJOINを使って一旦すべての文字列を結合し、その後SPLIT関数(現時点ではExcelにSPLIT関数は存在しないが、Office ScriptやPower Queryなどでは可能)で再度分割しようとする方法を検討する方もいるかもしれません。しかし、Excel本体の機能としては、現段階ではSPLIT関数が用意されていないので、これはPower Queryなど外部手段を利用しない限り難易度が高いです。

Power Queryの活用

Power Queryを使うと、クエリエディタの中で不要な空白文字や行を削除する操作をGUIで実行できます。複雑なスペースの除去も、手順を画面上で設定していくだけで実行可能です。ただし、Power Queryの画面や使い方に馴染みがないと、学習コストがかかるのがデメリットです。

Power Queryでの置換例

1. Power Queryエディタを開き、対象のテーブルを読み込む
2. 「値の置換」や「トリミング」機能を使ってスペースや不要な文字を取り除く
3. クエリを閉じて読み込み直すと、不要なスペースが削除された状態でExcelシートに反映される

慣れてしまえば非常に楽ではありますが、「なるべく関数だけで完結させたい」という人もまだ多いかと思います。

古いExcelバージョンでの対処法

動的配列が使えるのはOffice 365の新しいバージョンのみなので、Excel 2019以前だとFILTERやUNIQUEが使えません。そういった場合は、オートフィルターや従来の配列数式などを使って対処することになります。

従来の配列数式での空白セル除去

従来の配列数式も一応できますが、数式を確定させるのにCtrl + Shift + Enterが必要だったり、参照範囲を伸縮させるのが面倒だったりと、運用面で注意が必要です。新しいExcelに比べると更新が自動化されないので、セルを増やすたびに配列数式の範囲を修正する必要が出ることが多いです。

従来の配列数式は、意図しないタイミングで壊れてしまうリスクや、同僚への引き継ぎ時に混乱を招く欠点があります。

スピル範囲を扱うときにやりがちなミスと対策

ここからは、私自身が動的配列を使い始めた頃に犯したミスや、それをどう回避したかという点を共有します。ちょっとした気の緩みでセル参照を間違えたりすると、空白セルの除去が中途半端になることもあるので要注意です。

スピル先のセルを参照しているのに気づかない

FILTERやUNIQUE、SORTなどで出力されるスピル範囲を別の計算式で参照している場合、元データが更新されるとスピル範囲の大きさが変わり、想定外のセルを拾ってしまうケースがあります。これによって空白セルが混入しやすくなるので、数式を組むときには「どこを参照するのか」を明確に把握することが大切です。

対策:スピル範囲演算子「#」を使う

動的配列では、スピル範囲を参照したいときに「=A1#」のように末尾に「#」を付けると、スピルしている範囲全体を表すことができます。これを活用すれば、スピル範囲が増減しても柔軟に対応できて便利です。空白セルの除去がうまくいっているかどうかも含めてスピル範囲自体を正しく参照できるようにしておくと、後工程でのミスが減ります。

誤って罫線や色だけ入ったセルを「空白」とみなす

Excelを使い込んでいると、ときどきセルに書式だけが設定されており、実際には値が入っていない状態でも目視だとデータが入っているように錯覚してしまうことがあります。あるいは逆に、背景色だけ付いたセルを本当に空白だと思って何も処理しないままにするケースも。こういった「見た目の落とし穴」は少なくありません。

対策:表示形式をテキストや標準に戻して確認する

セルの数値や文字列の状態を確認するには、数値に変換できるかどうかテストしてみたり、別のシートにコピーして書式を完全にクリアしてみるといった方法が有効です。最終手段としては、列ごとコピーして新しいシートに「値として貼り付け」してからFILTERしてみるというのもひとつの手です。

私も、セルに色だけ付けてデータを何も入れないでおいたら、意図せずそこを空白セルだと誤解したことがありました。見た目だけじゃ絶対に判断できないので、実際に数式を入れてみて初めてわかることがあるのが厄介ですよね。

空白文字や改行コードを見つけるテクニック

空白セルを除去する以前に、そもそもどのセルに余計な空白文字や不可視文字が紛れ込んでいるかがわからなければ、対策も立てづらいです。ここでは問題のセルを見つけるための簡単なテクニックをまとめます。

LEN関数で文字数を可視化する

LEN関数でセルの文字数を調べると、見た目では空白でも実際には1文字以上あったり、改行コード分がカウントされたりすることがわかります。たとえば、C2セルに対して次の式を入れると、そのセルの文字数が表示されます。

=LEN(C2)

文字数が0であれば本当に空白ですが、1以上であれば何らかのスペースや改行、特殊文字が存在する可能性が高いです。

CODE関数で文字コードをチェックする

1文字ずつ切り出して文字コードを確認すると、どんな種類の空白や制御文字が入っているかがわかります。たとえば、次のようにMIDとCODEを組み合わせた式で、C2セルのi文字目の文字コードを取得できます。

=CODE(MID(C2, i, 1))

この方法は少し手間がかかりますが、何が紛れ込んでいるか分からないときには有効です。実務では「全角スペース(文字コード32じゃなくて12288)が入っているかどうか」を調べるために活用するケースが多いです。

具体的な処理の流れを例で解説

ここではExcel 365環境で、動的配列を用いて空白セルを除外する一連の流れを簡単にまとめてみます。たとえば以下のように名前や住所が入力されたリストがあると仮定してください。

セル範囲 内容
G5 田中太郎
G6
G7 山田花子
G8  斉藤実
G9 (改行入り)
G10

「G6」には半角スペースが2つ、「G8」には全角スペースが前に1つ、「G9」にはセル内改行が仕込まれており、「G10」は本当に空白の状態だとします。これらを一括で除外しつつスピルさせたい場合は、以下のように書けます。

=LET(
    tmp, TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(G5:G10, " ", ""), " ", ""))),
    FILTER(G5:G10, tmp <> "")
)

この例では、半角スペースと全角スペースを2回のSUBSTITUTEで削除し、CLEANで制御文字や改行コードを取り除き、TRIMで両端の空白を削除したあとにFILTERにかけています。最終的に実際のデータが入っているセルだけがスピルされる、という動きになります。

まとめ:空白セルは必ずしも空とは限らない

Excelで「空白セルを除外したい」と思っても、それがスペースや改行コード、不可視文字を含んでいることは多々あります。特に、ウェブからデータをコピーしてきたり、他のソフトからエクスポートしたCSVやTSVをインポートした場合などは、どんな文字が混入しているか油断できません。動的配列を活用する際は、FILTER関数やSUBSTITUTE関数、TRIM、CLEANなどを組み合わせてセル内の文字をクリーンにしてから除外条件を設定するのが得策です。

私自身、一度きれいに処理したはずのリストで、別のパソコンから送られてきたデータに全角スペースが混じっていたことに気づかず、集計がずれて焦った経験があります。そうした事故を防ぐには、今回のように一括置換やFILTERの条件を厳密にすることが大切だと痛感しました。

執筆者のコメント:これからのExcelをもっと便利に

Excelは長く使われているソフトですが、Office 365で次々と新機能が追加され、従来の苦労が一気に解決できる場面が増えています。動的配列もそのひとつで、FILTER、SORT、UNIQUEといった関数がスピルという画期的な仕組みを使ってさまざまな可能性を広げてくれます。ただ一方で、こうした新機能には「空白セルやスペースをどう扱うか」という盲点が残っています。正しく理解して活用すれば、データ整理の手間も大幅に減り、業務効率化につながるはずです。ぜひ、新しい関数を恐れずに試行錯誤しながら自分の業務やプロジェクトに取り入れてみてください。

忙しい現場でこそ、動的配列のメリットは生きてきます。今まで「手動で空白を削除していた」作業をまとめて自動化できるのはとても気持ちがいいです。


コメント

コメントする