Excel操作はAutoMateを使用して自動化されるポピュラーな業務の一つです。別Excelへの転記やWebブラウザからの書込み等シンプルな動きから、関数やマクロを使用した高度な処理まで、様々な業務がAutoMateにより効率化されています。しかしながら、それまで人間が使っていた状態のExcelをいきなりAutoMateに使わせると定義作成が一筋縄に行かなくなることがあります。本記事では、"人間が見やすい"と感じるExcel表記の代表格「セル結合」をそのままAutoMateで使用するとどうなるのか、ということについて紹介します。
セル結合されたExcelに対し、AutoMateの定義を作ってみる
セル結合を使用したリストの例として、ディスコグラフィを用意しました。アーティスト名、リリース年、アルバム名、収録面の情報が"大項目"としてまとめられ、収録曲の情報が一目瞭然です。このリストをポンと手渡されて「アルバム"With the Beatles"のB面、4曲目を教えて」と聞かれても、5秒とかからずに答えられるのではないでしょうか。
このリストを使って、「上から順にアルバム情報を参照し、アルバム名が変わったらアラートを出す」というAutoMateの処理を作るとします。
■パターン1: アルバム名を次の行の表記と比較
まず、以下のシンプルな処理を構築したとします。
- "アルバム名変数"と"一時確認用変数"を作成
- アルバム名を1行ずつ順次確認し、"一時確認用変数"に格納
- 現在の"アルバム名変数"と"一時確認用変数"を比較し、値が異なればアラート
- アラートが出たら"アルバム名変数"を"一時確認用変数"の値で更新
この状態で処理を動かすと、確実にアラートが過剰に出ます。
「アルバム名が行単位で変わっているのになぜ?」と思ったかもしれません。
試しに、結合されている部分を全てバラしてみます。
結合を解除するとわかりやすくなりますが、"アルバム"列には「アルバム名が記載されているセル」と「値の存在しない空白セル」が存在しています。これもれっきとした「変化」です。そのため、"アルバム名が1行前から変わったら"という条件設定にしていると、”空白”も反応してしまうわけです。誤ったアラートが出てしまうので、パターン1の処理はこの形式のExcelに対し不適切な構造であると言えるでしょう。
■パターン2: 空白かどうかを判定
空白に反応するのがパターン1の問題なので、以下のように改修するとします。
- "アルバム名変数"を作成
- アルバム名を1行ずつ順次確認し、"アルバム名変数"に格納
- 変数が空白かどうか判定し、空白でなければアラート
Excelの状態を見ると、確かに空白でないセルにはアルバム名が入っていますし、現れるアルバム名も毎回異なります。これならセルが結合されている状態であっても、「表記ルールが守られている限りは」正しくアラートが出せそうです。
■パターン3: パターン1と2を組み合わせる
管理している人がある日突然、B面に切り替わる行にもアルバム名を記載し始めたとします。この運用になると、アルバム名の列では以下の状況が起こりえます。
- 同名のアルバム名が入っている
- 異なるアルバム名が入っている
- 空白
「空白ではない=アルバム名が切り替わった」という図式が崩れ、パターン2を使用した"アルバム名が変わったらアラート"という定義が使えなくなってしまいます。
そうしたイレギュラーを乗り越えて、確実にアルバム名を比較してアラートを出すには、パターン1とパターン2を融合させます。
- "アルバム名変数"と"一時確認用変数"を作成
- アルバム名を1行ずつ順次確認し、"一時確認用変数"に格納
- "一時確認用変数"が空白でないか判定
- 空白でない場合"アルバム名変数"と"一時確認用変数"の値を比較し、値が異なればアラート
- アラートが出たら"アルバム名変数"を"一時確認用変数"の値で更新
空白かどうかでまずふるいにかけ、空白ではなかった場合に変数に取得済みのアルバム名と現在のアルバム名を比較するため、正確に「アルバム名が切り替わったらアラートを出す」という処理が作れます。
■パターン4 【推奨】: Excelのフォーマット自体をRPA向きに変える
ここまでつらつらと、セル結合されている際の処理の組み方の例を書いてきましたが、Excelに対する処理定義の作成をもっと簡単にする方法があります。
それはずばり、「セル結合をやめて、全列埋めること」です。本記事で使用したリストも、下図の形式で表記されていれば"パターン1"を組み立てるだけで"アルバム名が変わったらアラート"という処理が実現できます。
セル結合されていないExcelは見づらくなる傾向にあります。それにわざわざセル結合をやめなくても、本記事のパターン3のように工夫を凝らして作り込めば自動化が可能です。しかしながら、"処理を作り込んで対応する"ということは"AutoMateのステップ数を増やし、エラーになりうる箇所を増やす"ということを意味します。また各行の各列がそれぞれ情報を持つと"空白の確認を行う"という定義を設ける手間が省け、処理のシンプルさと安定感の高さが両立可能になります。視認性は罫線の種類やセルの色など、AutoMateの定義に影響しない部分で補えば良いのです。
最後に
「人が行っていた業務をRPAに肩代わりさせる」という観点で、人が使用していたものをそのままAutoMateの定義に使用するというのは至極全うなことです。慣習や他部門との兼ね合いにより、フォーマット変更のコストが大きいというケースもあるかもしれません。その一方で、人が見やすいフォーマットがAutoMateの定義を複雑にし、最大効率での自動化を不可能にしてしまう場合もあります。Excelのセル結合はその代表格で、空白セルを見かけ上なくしてしまうという点で手順の増加や安定感の低下に繋がりうる要因です。
RPAで自動化させる予定のExcelにセル結合が存在する場合は、セル結合を排除したExcelにフォーマット変更することをおすすめします。フォーマット変更がどうしても難しい場合は、セル結合が空白を隠してしまっていることに留意して定義を作成しましょう。