PowerQueryでコメントを利用する

PowerQueryの処理ステップにコメントを残す方法について

PowerQueryにコメントを記載することが出来ます
これはExcel数式では出来ない便利な機能です

コメントが挿入されたことを示すアイコン表示状態の画像

この画像のステップ行にコメントが加えられるとアイコンが表示されます

コメントが表示された状態の画像

コメントが作成されたステップにマウスオーバーすると、こちらの画像の様にコメントがポップアップ表示されますので画面上の邪魔になることがありません

VBAと同じくステップ数が増えると、後々確認するとなんのためのステップか分からなくなります、もう絶対なります
そんなときのためにコメントを残して置きましょう

PowerQueryでコメントを残すには2通りの方法があります

プロパティの開き方の画像

1つ目は、ステップ名で右クリックを押すと表示されるメニュー項目のプロパティです

プロパティの設定画面が表示された状態の画像

これを開くとコメント入力ができる画面が表示されます
説明というのがコメントになります
改行も気にせず書くことが可能です

詳細エディターを開くボタンの場所の画像

もう一つは、詳細エディターで編集する方法です
ホームタブにある詳細エディターをクリックすると画面が表示されます

詳細エディター画面でコメントが表示されていることを確認している画像

こちらの画像ではすでにコメントが入力されている箇所があります
プロパティで設定したコメントもここにしっかり反映されます
コメント記号についてはVBAとは違いますので注意してください

1行のコメントの場合は「//」と入力します
その後に続けてコメント文を記載します

複数行コメントの場合の入力方法の画像

複数行にしたい場合は「/*」と「*/」で囲みます
改行をどれだけおこなっても問題ない形になります

実際のところ、この詳細エディターでの編集は1つのステップに対して行う場合は必要ありません
複数のステップをまとめてコメント追記する場合にいちいち画面を設定画面を開きなおさなくて良いのでそういった場面で利用します
この詳細エディターでコメントを記載すると、実際はこのプログラムでPowerQueryが動作していることがよく感じられます

コメントはクドいくらいが丁度いいので、有効に活用してください

PowerQueryの接続メンテナンス

PowerQueryの接続時のパスに関してのメンテナンス方法と更新頻度設定について

PowerQueryでデータの取り込みを行う場合に、どうしても発生するのが接続のメンテナンスです
単純にリンクの更新が主になります
またcsvファイルを社内Webシステム等からダウンロードする場合は、ダウンロードの名称が毎回違っていたり、所定の位置に上書き保存をしたりする必要があります
ここに関してはショートカットをうまく使うか、PowerAutomateDesktopを活用する方法で良いでしょう

今回の記事では、リンク切れや別のcsvファイルへ参照を変更したい場合の操作について解説を行います
2種類の方法がありますので、やりやすい方法で行ってください

ソースの変更を利用

PowerQueryを開くボタンの画像
PowerQueryを開くボタン

まずはPowerQueryを開きます
取り込みデータのテーブル内にアクティブセルがある状態になれば、リボンにクエリタブが表示されます
その中の最左にある「編集」ボタンをクリックします

PowerQueryの編集画面の画像
PowerQuery編集画面

PowerQueryの編集画面が表示されたら、メニュー右側にある「データソース設定」を選択します

データソースの設定画面の画像
ソース設定画面

ブック内にある外部参照のリストが表示されます
ここで注意してほしいのが、編集中のソース以外にもここには表示されますので変更対象のソースであることを確認して、選択してから操作を進めてください
別の形式のファイルを指定してしまうと、ソースの取り込みステップにてエラーが発生します
エラー発生の場合は一度画面を変更を破棄して終了してください

変更対象を選択してから、画面下側にある「ソースの変更」を選択します

ファイル設定画面の画像
ファイル設定画面

対象ファイルの変更を行うには、ファイルパス項目の参照ボタンからファイル選択ダイアログにて変更を行います
もし、文字コードに変更があった場合はここで修正可能です
変更が完了すればOKボタンを選択します
これで対象ファイルを変更することができます

詳細エディターを利用

ファイルパスだけであれば、絶対パス文字列を直接修正する方法も可能です
※他項目も変更可能ですが、理解していないと面倒です

PowerQueryの編集画面の画像
PowerQuery編集画面

PowerQuery編集画面のメニュー左側にある「詳細エディター」を選択します

詳細エディター画面の画像
エディター画面

この詳細エディターというのは、取り込みから各ステップの全ての内部コードを直接編集することが出来る機能です
黄色にハイライトした箇所が、データの絶対パスになるのでここに対象ファイルの絶対パスを拡張子まで含めて入力を行います

他の箇所を見てみると分かるように、各設定値もここで修正は可能です
例えば「Columns=15」というのはデータから15列を取り出すという意味になるので、ここを13とかにすれば取り込む列数を変更出来ます
取り込んでから削除しても良いですが、最初に取り込む量を減らすことが出来るのでデータの更新速度向上につながります
ただあくまでも左から何列という指定なので、歯抜けにしたいとか5列目だけとかは指定は出来ません

上記2点のいずれかの方法で、リンク切れになった際は対応を行ってください

更新頻度の設定について

外部データとの更新頻度も任意に設定可能です
ただあまり頻度が多いと他の作業に影響がありますので適当に調整します
初期設定では、更新を能動的に行う必要があります

プロパティ設定を開くボタンの画像
プロパティ設定

更新を自動的に行う場合は、クエリタブの左側にある「プロパティ」を選択します

クエリプロパティを開いた状態の画像
クエリプロパティ画面

画像は初期状態の表示となっています

「バックグラウンドで更新する」
これは更新中もExcelの操作が可能となりますので、通常はオンにしておいて問題ありません
ただ、後述の自動更新を設定した場合にその更新が行われていることを明示的に使用者に分からせるにはあえてバックグラウンドで実行しない設定も可能です

「定期的に更新する」
データの更新を開いている間、一定時間ごとに更新を行います
例えばcsvファイルなどの更新頻度の低いものではなく、Web情報であったり、最新情報が欲しいExcelデータであった場合に活用できます
ただこの取り込んだデータをピボットテーブルなどで集計する場合、そちらまで自動更新されるわけでは無いので注意が必要です

「ファイルを開くときにデータを更新する」
ブックオープン時に更新を行います
データの取得が目的のファイルであれば有効にしておくと良いです
前回開いた時点のデータを確認した場面も多々あり得るので、基本はオフで問題は無いでしょう
サブオプションの「ブックを保存する前に外部データ範囲からデータを削除する」をオンにすることで取り込んだデータを保存しないのでファイルサイズの軽量化を行えます
あまりにも大きいデータの取得を行っている場合は有効です

「すべて更新でこの接続を更新する」

すべて更新ボタンの位置の画像
すべて更新ボタン

すべて更新というのは、データタブの真ん中くらいにある画像のボタンです
これをクリックすると、ブックに含まれるピボットテーブルや接続などの再更新を行います
このオプション設定は、これをクリックしたときに更新を有効とするかどうかの指定です
名前の通り、すべて更新したいときに使用するボタンなので、なるべくこの設定はオフにしない方が混乱はしないと思うのでそのままオンの設定で問題ありません

VBAの場合だと、エディター画面を開いて、プロシージャを探して、パスの箇所を見つけて修正、となるのでメンテナンス工数は圧倒的に違います
接続関係のVBAは無くなりますね、こりゃ

PowerQueryについて

Excel2016以降で利用可能なPowerqueryの活用について

Excelの基本機能にPowerQueryという機能があります
この機能は外部データ(内部も可能)をテーブルとして取り込む機能です
この機能では取り込みを行う際のフィルターや並べ替えなどを含め記録することができます
それを記録しておくことで、定期的に外部データを取り込む際に効率化を図ることができます

多くの場合の取り込みデータはcsvか別ブックのデータになると思います
この機能の制約としてはテーブルとして出力されるため、取り込み先も表形式のデータになっていることが重要になります
ある程度は操作によって調整することが可能ではありますが、同じルールで作成が続けられることが前提となります
この機能を有効的に利用するなら、取り込み元もきれいに整えておくことをおすすめします
ただしcsvであれば、データの形式はきれいにそろっているのでそこはあまり気にしなくても大丈夫です
別ブックのデータを取得する際に特に重要です

Powerqueryを開くために、csvファイルを取り込む手順の画像
PowerQueryを開くための操作

まずPowerQueryを利用するにはデータの取り込み作業が必要となります
その取り込みの際に利用するのが、PowerQueryです
上記の画像の手順ではcsvファイルを取り込む際の流れになっています

  • リボンメニューから「データ」タブを選択
  • 「データの取得」を選択
  • 「ファイルから」を選択
  • 「テキストまたはCSVから」を選択
    ⇒取り込みたいcsvファイルを選択してください

今回の記事では郵便番号一覧のCSVデータを利用しています
日本郵便株式会社 – 郵便番号データダウンロード

Powerqueryの前に表示される取り込みデータのプレビュー画面の画像
PowerQuery前の画面

ファイルを選択すると、そのデータから自動的にデータが表形式に作成されてプレビュー表示されます
この画面の右下にある「読み込み」ボタンをクリックすると、新しいシート・テーブルが作成されてそこにデータが読み込まれます

約12万5千レコードが読み込まれた状態になっていると思います
このようにcsvファイルの取り込みは格段に簡単になっています

さらにcsvファイルでよくあるのが文字コードの不一致による文字化けです

文字コードを変更した場合の動き

これに関しては、このプレビュー画面の左上にある「元のファイル」という選択ボックスから文字コードを指定することで簡単に変更が可能です
プレビュー表示もされているので、正しい文字コードも選んでいけば分かります

ただここまでではPowerQueryの活用ではありません
この取り込んだデータの加工を、取り込む時点で加工するのがPowerQueryの機能となります

郵便番号一覧のデータでは郵便番号の列は全て数値になっていることが分かると思いますが、これは数字では無く決まった文字数のコードなので、どちらかというと文字列で取得をする方がデータに即しています
そこでPowerQueryを利用して郵便番号列は文字列に型を変更することが可能です

Powerquery画面で型変換の手順画像
PowerQuery画面から型変換を行う
  • テーブル範囲にアクティブセルを置いた状態で表示される「クエリ」タブを選択
  • 「編集」を選択 - PowerQuery画面が表示される
  • 変換したい列の見出しの左側にある個所をクリックすると型変換が行える
  • 「テキスト」を選択
  • 「現在のものを置換」を選択
Powerqueryにおいて、列の型変換をして取得されたデータが変更された状態の画像
型変換後のデータ状態

上記の手順を行うと、こちらの画像の様にデータが文字列型に変換されます
数値となり除外されていた頭の0が付与されていることも確認できます
単純にExcelでcsvファイルを開いたときは、この0が無くなるのがよくある注意点でしたがPowerQueryで取り込みを行えば次回以降は意識する必要が無くなります

変換作業が完了したら再読み込みを行うためのボタンの画像
操作の確定を行うボタン

変換作業が完了したら、PowerQueryの画面の左上の「閉じて読み込む」の画像の箇所をクリックするとその設定で再度csvファイルのデータを読み込みます
この操作は記録されているので、次回以降はPowerQueryの画面を開く必要は無くデータの更新を行うだけでこの作業が実行されます

PowerQueryの注意点はファイルへのリンクは絶対パスを利用している点です
フォルダ構成やファイル名などが変更になった場合はリンク切れとなり、データの更新が出来なくなります
VBAのような相対パスの概念は無いので注意してください
ここは環境によっては少し不便かもしれませんが、パスの修正自体はそれほど難しくは無いので割り切っておいて大丈夫です
普通に数式で外部参照している場合も同様ですし、それらより圧倒的にメンテナンスしやすいです

型変換に関しては、他にもいろいろな型があるのでリストを確認しておいてください
それと同じくらい強力なのがフィルタ処理です
取り込んだ後に必要なデータにフィルタ機能を利用してフィルタをかける作業がある場合は、そのフィルタ条件も取り込みの時点で指定することが可能です
1列など、切り替えが多い場合は逆に必要ないかもしれませんが
複数列などで条件立てをする場合は強力です

Powerquery画面でフィルター設定を行う手順の画像
フィルター設定手順

フィルタの手順については、通常のフィルタ機能と大きな違いはありません
各列の見出しにある▼ボタンをクリックすることで、条件の設定が出来ます

フィルタ設定画面の画像
フィルタ設定画面

特殊条件として便利なのが、この「空の削除」です
これを指定した列にある空白のレコードは除外されます
例えばコードが無いデータは不要なので、その列でこの設定をすることで不要なデータの取り込みを行わないようにできます

注意点としては、このPowerQueryの画面では全てのデータが読み込まれていないので
フィルタの選択項目がデータの全てになっていない
可能性がある点です
また取り込み元のデータのリストも、この手順作成時点と同じであるかどうかも分からないのでなるべく条件設定は抽象的な方がメンテナンスは減らせます
上記の画像例では、市町村以下の列で「オオサカシ」が含まれたものを指定しています
こうすることでデータの取り込み量を減らすことが出来るのでファイルサイズを無駄に大きくせずに済みます
これはこの後に行う、関数や作業の際にファイルの動作に影響を与える部分なので
可能な限りこのPowerQueryでデータを減らすことをお勧めします

また、Microsoftの推奨としてPowerQueryのステップもレコードを減らすものをなるべく上位にすることがあります
ステップの順番は、作業を行った順番に登録されていきます
例えば、今回の記事解説順で行くと以下の順番になっています

  1. データの取り込み
  2. 郵便番号列の型をテキスト型に変更
  3. 市町村列で「オオサカシ」を含むものにフィルタ設定

この手順で言うと、レコードの数を減らすのは3の手順となります
このフィルタによって1,200レコードほどになりますので100分の1ほどになります
これを2の手順にすることで、型変換の処理を行うレコード数を減らすことで読み込み速度の向上が見込めます
ステップの順番はドラッグするだけで簡単に行えます

ステップの修正

またステップの文字にマウスを移動させると、左側に×ボタンが表示されます
これをクリックすることでステップの削除も行えます

ステップの移動については、移動先との矛盾に注意が必要です
例えば今回の記事で行くと、上記の手順2で文字列に変更しています
その変更を前提として、郵便番号列で「011」で始まるものなどでフィルタ設定を行った場合にフィルタを移動させるとエラーとなります
なぜなら、型変換前は数値型のため「011」という文字列でフィルタ設定を行うことが出来ないためです
この場合にはエラーがちゃんと表示されるので、その場合は諦めるかステップを修正します
修正する場合は、ステップの文字列をwクリックすれば設定画面が表示されます

最後にPowerQueryとは直接の関係はありませんが、この機能を最大限活用するためにテーブル機能も活用します
と、いうのもテーブル機能というのは自動的に行が拡張されていきますが、その際に数式の入力された列の場合はその数式も自動的に拡張された行に反映されることを活用できます

実はPowerQueryで自動作成されたテーブルの最左列に追加を行っても読み込みに影響を与えません
これを利用します

テーブルに列を追加した場合の画像
追加した列

このcsvファイルのデータ列数は15列となります
その左に住所の文字列を結合したセルを作成してみます
画像の様に単純に行の各列を&で結合しただけの関数です

テーブル機能のおかげでデータの取り込み数によって自動的に増減するので、関数の行数を調整する必要もありません
またデータの取り込みを完了した時点で関数の結果も計算されています

もし、これまでcsvファイルをテキストコピーして貼り付け-データの分割でデータを作成-フィルタ機能で条件抽出-関数を作成して行数分オートフィルする
というようなよくある手順を踏んでいた場合は、データの更新を行うだけ(ワンクリック)でこの作業が完了してしまいます

この様にPowerQueryとテーブル機能と関数の組み合わせで、データの取り込みから加工までを設定で行えるためVBAをこれのために組んでいるなら早々にこちらへの切り替えをおすすめします
VBAのメンテナンスより遥かに簡単ですから

Officeスクリプトの実行について

Web版ExcelのOfficeスクリプトの実行方法とその注意点について

OfficeスクリプトはWeb版のExcelで利用可能な機能です
またこれは組織アカウントなので個人アカウントだけでは利用できません
とはいえ、この機能を個人で利用したい場面は少ないので、問題はないと思います

それよりもタイトルにありますように、この機能のパッとしない点が実行方法が限定的である点です
何よりExcelを利用している時にこの機能で何かをしようというのは現時点では現実的では無いかもしれません

その最大の理由がイベント処理が無い点です

VBAをある程度触ってきた人には良くわかると思いますが、このイベント処理が無いというのは結構大変です
処理の開始は常に手動実行以外の方法が無いからです

しかもVBAと比べるのも土俵が違いすぎるかもしれませんが、処理速度が目で追えるレベルです
まだまだ発展途上の機能ではあるので、いずれはイベントも対応するかもしれません

が、現時点ではWeb版Excelとしては手動実行のみです
しかもこのスクリプトはブックとは別に存在しているので、ブックを渡せば処理が実行できるわけではありません
その処理ファイルが必要となります

これ自体は一長一短かとは思うので、VBAのイメージでいくと面倒に感じる部分もあるかもしれませんが、仕様と割り切って良いでしょう

あと気になるのが、所持してるスクリプトが全て表示されるので数が多くなってくるとちょっと管理が面倒です
これも何か対応を検討して欲しいな、と思ってます

自動実行(PowerAutomate)について

実行は手動のみと上記で記載しましたが、あくまでもWeb版のExcel単独でいうと
ということになります

と、いうのも
PowerAutomateから実行することが可能です

ちなみにDesktop版のPowerAutomateではスクリプトは実行できません
だってExcelがDesktop版の操作になるので

そして、このPowerAutomateからの実行では引数を渡して、返し値を受け取ることも可能です
これを応用すれば、PowerAutomate経由でPowerAppsでExcelデータを制限を受けずにデータの取得を行うことが出来ます

またPowerAutomateによりトリガーを設定することで、何かしらのイベントでスクリプトを実行することが出来ます
メールを受信したらその内容をExcelに転記したり、OneDriveにファイルが作成されたらファイル情報を転記したり等々

さらにこのスクリプトを併用することで、PowerAutomateではExcelのデータ入力はテーブル機能に対してしか行えなかったのが、任意のセルに入力することが出来ます
これが現状では最大の利用点かと思います

ただ、残念なことがあります
それはPowerAutomateでは2次元配列が作成出来ない点です
もちろん静的なものはコードの書き方で可能ですが、動的なものは作成できません

VBAでも同じですが、データの入力は配列で一括処理が早いので良く利用されます
これが引数として渡せないのです
もちろんスクリプト自体は多次元配列を引数に受け取ることも可能ですし、処理も可能です

そして、この処理時間に関して結構重要で最近ハマったのですが
PowerAutomateのアクションのタイムアウトの存在です
これがネックとなります

つまり、PowerAutomateでスクリプトを実行するアクションを実行した後に
その処理時間がタイムアウトの時間を超えてしまうと、PowerAutomate側でエラー終了となりスクリプト側でエラーは発生していないにも関わらずフローが失敗します

スクリプトをWeb版Excelで手動実行したら、エラー無く処理が完了するのに
PowerAutomateから実行するとエラーでフローが停止する

この現象に悩まされました

結果としてはタイムアウトが絡んでいることが分かったのですが
その設定を伸ばしても処理の引数が可変であった場合、どこまで保険を置くかは判断が難しいです

なので、タイムアウトの設定は変更せず
その時間内で処理が完了できるように調整する必要があります

例えば、全行の処理を実行したいのならば
スクリプト側で全行の処理にするのではなく、数百行ずつ実行する、といった処理の分割を行う必要があります
これが出来ない処理であれば、もはや現時点では仕様として対応出来ません

2000行ほどある処理を実行しようとした場合にタイムアウトとなっていたので
それを少しずつ減らして検証を行っていきました
結果として300行ほどがギリギリのラインであることが分かったので、処理は200行ずつ実行するようにしました
もちろんこれは処理内容によるので、ここに記載した数字には全く何の意味もありませんのであまり気には留めないで下さい
2000行だと毎回エラー終了するけど、200行ずつの分割実行にしたらエラー終了は無くなったという事が重要な点です

もう一つこの方法で重要なのが、返し値に処理が終端に達したことを知らせる必要があることです
その返し値になるまでPowerAutomateではループ処理を実行することになります

この辺はおいおい説明します

今回としてはWeb版Excelでは手動実行しかできない
PowerAutomateから自動実行は出来るがタイムアウトに注意する

ここを念頭において作成を進めてください

UNIQUE関数について

Office2021とWeb版で利用可能なUNIQUE関数は重複除外リストが簡単に取得出来るやつです

Office2021(Office365)・Web版で利用可能な関数にUNIQUE関数というものがあります
この関数は指定した配列データの中で重複したデータを削除したデータを返す関数です
この関数を利用することで、表のデータから簡単に重複しないデータを取得できます

この重複しないデータの作成は、案外利用場面が多くあったのですが、標準機能ではデータタブ内にある重複データの削除という機能から行うことが出来ます
後述しますが、まだこちらの機能に完全に有利になってはいないので、この機能を知らない人はデータタブ内を確認してみてください

ただ、こちらは関数のためいちいちデータを転記して操作を行わなくても関数の再計算のタイミングで自動的に取得できるのは便利です(常に最新情報)

関数の書式

引数(太字は必須引数)
(配列, [列の比較], [回数指定])

「配列」は重複しないデータを作成する配列データです
連続していれば複数列を範囲指定することが出来ます

「[列の比較]」は、重複参照時に列方向を対象にするかどうかの指定です
列を対象にすると、列方向に重複しない場合はその列が取得されません
あまりExcelのデータ形式からすると使用しないかもしれません
省略時は行方向が指定されることになります

「[回数指定]」は、重複データの中でも1度しか出てこないデータだけを指定できます
1度しか出てこないデータは、配列データ内で完全に一意になっているデータという事になります
案外欲しい、この逆説のデータ取得は出来ません

実際の使用例

使用するデータベース

今回はこのデータを元に関数を使用してみます

UNIQUE(Sheet1!A2:A21)
関数で取得されたデータ

基本的な使い方として、指定データ範囲を配列データとして指定します
今回はA列のデータ範囲を指定しています

この中から重複したデータだけを削除したものが取得されています
データの総数は20個ですが、重複データが15個あるのがこれで分かりますね

=UNIQUE(Sheet1!A2:A21,,TRUE)
関数で取得されたデータ

次に完全な一意のデータのみを取得してみます
3つ目の引数に「TRUE」を指定します
指定配列内の中で、1度しか出てこなかったデータが取得されます

「kkk001」と「kkk003」が複数回出てきていたことが、前回の結果と比べると分かりますね
ここが前述の逆説のデータをとれないという点ですが、この複数回出てきているデータだけを取得する設定が無いんですね、なんでやろね

=UNIQUE(Sheet1!A2:B21)
関数で取得されたデータ

次に複数条件での重複除外データの取得を行ってみます
A列とB列の両方を配列データに指定することで、複合的な条件でリスト作成を行うことが出来ます

この場合ですと、A列とB列の両方が重複するものが除外される形になります

ただ少し残念なのが、連続した範囲でしかセル指定が行えない点です
A列とC列を参照したい場合に、そのままでは指定が行えないのですね
なので、C列のデータをB列に持ってくるような工夫が必要になります
ここが最初の方で記載した、既存の重複データの削除機能に優位になっていない点です
重複データの削除機能は飛び飛び列で条件指定を行うことが出来ます

この様に単独列の重複しないデータのリストが簡単に作成できる関数であることが分かってもらえると思います

XLOOKUP関数について

Office2021とWeb版で利用可能なXLOOKUP関数はLOOKUP関数系の最終進化系です

XLOOKUP関数を利用していますでしょうか?
この関数はOffice2021(Office365)・Web版で利用可能な関数です

この関数は、ある程度関数を知っている人にはVLOOKUP関数等のLOOKUP関数系であることはイメージできると思います
VLOOKUPでもHLOOKUPでも無く、XLOOKUPが存在します

この関数は引数の配列内から検索して、その配列と同じ順番にあるデータを返す関数です
ただこれだけだと、あまり既存の関数と差があるとは思わないかもしれません

決定的に違うのは、前述の検索対象が「配列」であることです

これは意外に今までの関数ではあまり無い考え方になります
というのも、VLOOKUP関数等は引数に指定するデータは「セル範囲」であることが前提です
このデータの取得の行い方で全く動作と利便性が変化します

今までのLOOKUP関数は、セル範囲の中で検索を行う、見つかったセルと同じ行・列の指定した行数・列数を移動させたセルのデータを取得します
そのため、制限として「検索個所と取得個所が連続したセル範囲であること」「取得セルは検索セルより、左の列・上の行は指定できない」という大きな点がありました

そのため、LOOKUP関数を利用するために、本来別のシートやブックにあるデータを1つのシートにコピペしてデータを結合して検索可能な表を作成する必要がありました
これはセルという概念が前提であることが理由でした

しかし、XLOOKUP関数はセルではなく配列データから検索・取得を行うため
上記の制限が全くありません

つまり、「検索するデータ範囲と取得するデータ範囲が連続していなくていい」「取得するデータが検索データよりセルの位置が上でも左でもいい」ということになります
特に大きい利便性向上につながるのが、1点目の連続していない範囲でよくなった点です

要するに、同じシートである必要もなくなり、なんならブックを超えた検証を行うことも可能となりました
そのため、検証作業が非常に簡単になります

さらに地味にありがたいのが、見つからない場合の返し値を指定できる点です
LOOKUP関数系では見つからない場合エラーとなってしまうため、そのデータを参照した関数は連鎖的に全てエラー表示となってしまいます
そのため、LOOKUP関数をIFERROR関数でネストさせて見つからない場合は特定の値を返すように関数を組んでいることが多々あります

これが必要なくなりますので、作り込みによってはすさまじくネスト数を減らすことも可能となります

関数の書式

引数(太字は必須引数)
(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])

「検索値」は検索対象のデータです
これはLOOKUP関数系と差は無いと思いますので、特に解説不要と思います

「検索範囲」は検索対象の配列データです
配列データですが、基本的にExcel上ではセル範囲で指定します

「戻り範囲」は取得対象の配列データです
検索対象で見つかった配列のデータ番号と同じ順番のデータが返されます
基本的に列を指定している場合は、同じ行数のデータになります

「[見つからない場合]」は検索配列に検索対象が見つからなかった場合に返す値の設定です
数値の0を指定したり「””」(空白)を設定したり、なんでも指定できます

「[一致モード]」は検証方法です、基本的には完全一致が条件です
ですが、なんとここでワイルドカードを指定することができる様に設定できます
ワイルドカードまで対応しているなんて、なんてことをしてくれるんでしょうか
ワイルドカードが分からない人にはピンと来ないかもしれませんが、本記事では割愛します
ワイルドカードが利用可能、という点が認知できていれば十分です

「[検索モード]」は検索方向の設定です
末尾から検索したいとき程度に利用しますが、あまり頻度は高くないと思います

実際の使用例

検証を行うデータテーブル
データ検証対象

こちらのテーブルデータをもとに検証を行う場面を想定してみます
実務となると検証対象が数百件以上となることもあると思います
今回はとりあえず20件で検索を行います

このデータの中で存在するデータと、そうではないデータを検証します

作成した関数
実際に作成した関数
=XLOOKUP(B2,Sheet1!A:A,B:B,"×")

上記のような関数を作成しました
この関数では、関数のセルの左にある入力値をSheet1のA列データから検索して、見つかったデータと同じ行数のSheet2のB列から取得を行います
見つからない場合は「×」を返します

そのため、取得が行えているデータの場合は条件セルと関数セルが同じ内容が表示されます
上記の画像でも同じものが2列に並んでいることが確認できます

検証結果の画像
検証を行った状態

このまま条件の行数分に関数をオートフィルで作成を行います
この画像の入力値は前提としてマスターデータと考えてください
登録すべきデータ自体は過不足なくここのリストにあります

最初に見せたデータテーブルに、このマスターデータの内容がちゃんと存在しているかを確認するための検証作業です
この画像の様にマスターデータを元に検証を行うことで、データの検証を行えます

実際画像を確認して分かるように、「kkk012」が入力テーブルには存在していないことが分かります
これでこのデータが入力漏れ等のミスが発生していることを発見することが出来ます

XLOOKUP関数は、別のシート、別のブックも可能なのが強みだと思います
また配列データなので、セルの行数が同じでなくてもセルの個数さえ一致していれば検証と取得を行えますので、非常に柔軟にセルデータに対して対応を行えます

VBAで検証処理を作成するのも良いのですが、やはり関数が利用しやすい場合は利用するべきですね
今後、この関数がExcelを席捲していくこと間違い無しです

Excel(Web版)のOfficeスクリプトについて

ExcelのWeb版のみ利用可能なOfficeスクリプトについて

ExcelのWeb版のみでかつ、365ユーザーのみが利用可能な機能として、記事タイトルのOfficeスクリプトがプレビュー機能ではありますが実装されています

まだまだ検証を始めたばかりなので、少しずつ記事に出来ればと考えています

まずもって、なにがこの機能の利点かと言いますと現在拡張されている将来性のある機能であることにつきます
VBAは進化をやめて久しい言語です
無くなることはあり得ないとは思いますが、衰退することも止む無いのかもしれません

その1番の理由が、共有時にVBAが利用できない点が大きいです
2020年はコロナという世の中の大きな変化を否応なしに求められました
そこで大きな変化となったのが、在宅勤務の存在です

出社せずに自宅で業務を遠隔にて行う
この形態においてExcelの最大の弱点が大きく露見する形となってしまいました

その最大の弱点こそ、共有・共同編集の弱さです

共有機能に関してはかなり昔からある機能ですが、なかなかクセがあり
うまく編集が保存されていなかったり、いろいろ不安定な部分がありました

しかし、現在はWebを介する形で共同編集が可能となります
Teamsにおいても共同編集(同時編集)が可能です
他の人が開いているので、読み取り専用で開く必要があったり
編集が完了したので保存したら他の人の編集データを上書きして消失させてしまったり…
保存のたびに使用しているであろう人に連絡を取って、閉じてもらったり、編集を中断してもらったり…
これらを一挙に解決してくれる共同同時編集は、今までのExcelにおいて考えても圧倒的に画期的です

ですが、ここで残念なお知らせです
共同編集環境ではVBAが使われへん!という死の宣告のようなものです

もちろんマクロブックを編集することも出来ますし、上書き保存したからといってマクロが無くなることもありません
ただただマクロが実行できないだけです

VBAのヘビーユーザーのだいごろもこれにはお手上げです
どうしようもないです「だって、仕様だもの」

この画期的な共同同時編集の便利さとVBAの便利さの間に挟まれ、まさにどちらに両足を付けるか思い悩む日々を悶々と過ごすことになります

ところがどっこいです
どちらに両足を付けるか悩んでいた、その間から割って入ってきたのがこのOfficeスクリプトです

これはWeb版のみ利用可能なので、Teamsでの作業時には利用できません

このOfficeスクリプトは、まさに自動処理を行う機能なのです
しかもVBAと同じくマクロの記録的にコードの自動作成も行える優れものです

もちろんまだまだ機能的にもVBAにはとても追いつきませんが、PowerAutomateと組み合わせることが可能なのです
自動実行は言わずもがなで、今後機能が追加されるであろうこのアプリとの連携を考えると居ても立っても居られない気持ちになります
どちらに跳ぼうか迷っていた時に、遥か天空から鋭く急降下して、いきなり背中を鷲掴みにされて大空高く連れ去られて行ってしまったような気持ちです

クラウド上の処理のため、処理速度は非常にゆったりしていますが、それだって今後のことを考えれば問題ないです

ちなみに、Officeスクリプト単体では正直あまり使わないかもしれません
なぜなら自動実行では無いので、手動実行するのならVBAの方が圧倒的に早くいろんなことが出来るからです

PowerAutomateとの連携時には引数の設定により、相互にデータのやりとりも行えます
これは非常に大きなことで、処理時間を度外視すれば
PowerAppsで委任がサポートされていないExcelですが、検索取得処理をOfficeスクリプトに任せて答えの数件をPowerAutomate経由で取得すれば2000件のアイテムを超えるデータを扱えることになります

Officeスクリプト単体では使い勝手は微妙ですが、これらのOfficeアプリとの連携を考えると非常に強力な処理が作成できそうです

VBAユーザーの皆様!これからはこのOfficeスクリプトにも注目をしましょう

ただ、Officeスクリプトは言語がVBAではなく、TypeScriptという別の言語ですけどね(ズコーっ!)