【VBAリファレンス】Excel VBAの常識を覆す Power Queryで実現する「売上数値のみ抽出」の最適解

スポンサーリンク

概要:なぜ今、Power Queryなのか

Excel業務において、長年VBAによるデータ整形を行ってきたエンジニアの皆様にとって、Power Queryは単なる「補助ツール」ではなく「データ処理のパラダイムシフト」です。特に、CSVやExcelのリストから「売上」という項目を抽出し、その値が数値である行だけを瞬時に取り出すという処理は、VBAではループ処理や型判定を駆使する必要がある重たいタスクでした。

しかし、M言語(Power Queryの背後にある言語)を理解することで、この処理をわずか数行の記述、あるいはGUIの操作だけで、極めて高速かつ安全に実行できるようになります。本記事では、データクレンジングの現場で最も頻繁に遭遇する「不正な値の混入」を排除し、信頼できる売上データのみを抽出する手法を、M言語のロジックと共に徹底的に解説します。

詳細解説:M言語による型フィルタリングのメカニズム

Power Queryでデータを取り込む際、最大の問題となるのは「売上列に文字や空行が混在している」ケースです。VBAであれば、For Eachループで各セルをチェックし、IsNumeric関数で判定を繰り返すのが一般的ですが、これは数万行のデータではパフォーマンスを著しく低下させます。

Power Queryの内部では、データは「テーブル」という概念で管理されており、各列には強力な型(Type)が定義されています。M言語で「売上が数値の行のみを取り込む」という作業は、単なるフィルタリングではなく、「型指定による暗黙的な変換と、それに失敗したエラーの排除」というプロセスで行われます。

具体的には、以下の3ステップでロジックが構成されます。
1. ソースデータの読み込み
2. 該当列の型を「数値(Int64.TypeまたはCurrency.Type)」に強制変換
3. 変換時に発生するエラー値(文字データなど)をフィルタリングして除外

このアプローチの最大の利点は、イミュータブル(不変)なデータ処理にあります。元のデータソースを汚すことなく、メモリ上で効率的に処理が完結するため、巨大なデータセットを扱う際もExcelがフリーズするリスクを最小限に抑えられます。

サンプルコード:M言語による実装の核心

Power Queryのエディタ内にある「詳細エディター」を開き、以下のコードを確認してください。これは、売上列がテキスト混じりであっても、数値のみを確実に抽出するための標準的なクエリ構成です。

let
    // ソースデータ取得(例:Excelのテーブル)
    Source = Excel.CurrentWorkbook(){[Name="売上データ"]}[Content],

    // 列の型を変更する際に、あえて型変換エラーを許容する
    // try ... otherwise を活用して安全に変換
    Transform = Table.TransformColumns(Source, {
        {"売上", each try Number.From(_) otherwise null, type number}
    }),

    // 数値変換に成功した(nullではない)行のみを抽出
    Filtered = Table.SelectRows(Transform, each ([売上] <> null))
in
    Filtered

このコードのポイントは「try…otherwise」構文です。VBAにおけるOn Error Resume Nextに相当する記述ですが、より局所的かつ安全に制御できます。Number.Fromで数値化を試み、失敗すればnullを返す。最後にnullを除外することで、数値以外のゴミデータが混入することを防いでいます。

実務アドバイス:VBAとの使い分けと連携

ベテランの皆様にこそお伝えしたいのは、「VBAを捨てる必要はないが、役割を分担させるべき」という点です。

まず、データの読み込み、整形、クレンジングといった「前処理」は、100% Power Queryに任せてください。Power Queryは一度構築すれば、データソースが更新された際に「更新」ボタンを押すだけで、自動的に再計算を行います。

では、VBAはどこで使うのか。それは「Power Queryの出力結果をトリガーにした後続業務」です。例えば、整形された売上データを使って特定のフォーマットで請求書を発行したり、メールを送信したりする部分はVBAの独壇場です。

実務での鉄則として、以下のフローを推奨します。
1. **Power Query**:データを取り込み、型を整え、数値のみを抽出する(「売上_クリーン」という名前のテーブルに出力)。
2. **VBA**:その「売上_クリーン」テーブルを参照し、ビジネスロジック(計算、加工、出力)を実行する。

これにより、VBAコード内での型判定やエラーハンドリングの記述が劇的に減り、保守性が飛躍的に向上します。

まとめ:データ品質を担保するエンジニアへ

「売上が数値のみの行を取り込む」という一見単純なタスクは、データ基盤の信頼性を決める重要な作業です。VBAで泥臭い実装を続ける時代は終わりました。M言語の持つ「型への厳格さ」と「処理の高速性」を武器にすることで、あなたの業務はより専門的で、かつ余裕のあるものへと変わるはずです。

Power Queryを学ぶことは、Excelを単なる表計算ソフトから「データ分析プラットフォーム」へと進化させることに他なりません。今回紹介したエラーハンドリングの手法を、ぜひ明日の業務から取り入れてみてください。エラーに怯えるのではなく、エラーを構造的に排除する。これこそが、プロフェッショナルなExcelエンジニアのあるべき姿です。

タイトルとURLをコピーしました