UiPath(ユーアイパス)は、無料で使えるRPA(ロボット)ツールです。
これを使って、交通費検索のサンプルをつくる過程を解説します。
ひとりしごとのRPAツールの選択肢
ひとりで仕事をしていれば、RPA(Robotic Process Automation。ロボットによる自動化)は強い味方です。
雇わないスタイルを維持でき、時間をつくることができます。
※RPAとはサーバーで稼働するものを指し、ひとり用に1台のPCで使うものは、厳密にはRDA(Robotic Desktop Automation)といいます。
ただ、このRPAツール、高い、高い。
NTTデータの提供するRPA、Winactrorは、年90万円です。
毎年90万円払います。
毎年トライアスロンバイク買うようなもんです。
(おつりがでます)
年に3回ハワイに家族で行けます。
私にはとても出せません。
年90万円ならまだいいほうで、年700万、1000万というものもあります。
あこぎなコンサルティングとセットなものも多く、その周辺ビジネスもさかんです。
が、本当に使いこなせている人はどれくらいいるのかという疑問もあります。
RPA関係の本、セミナー、展示会で独自に取材したところ、ひとりしごとでのRPAツールの選択肢は、
・WinAutomation(買い切りで約11万円)
・UiPath(条件付き無料)
・RPA Express(無料)
です。
今回は、UiPathを取り上げます。
条件付き無料というのは、このコミュニティエディションです。
小規模事業者(年間売上100万ドル以下)なら、無料で使えます。
(無料体験という位置づけでもあります)
htps://www.uipath.com/ja/community
毎回、こういった表示が出ますが、「Continue Free」で続けましょう。
無料のRPAツールでは、使いやすさは、WinAutomationという印象ですが、WinAutomationでできないことがUiPathでできるものはありました。
それぞれ使いつつ検証中です。
UiPathの導入、インストール
サイトで登録後インストールしましょう。
起動するとメールの設定等があります。
「Continue Free」で次へ
ここでは、「Blank」を選びましょう。
次にロボット名とフォルダの場所を決めます。
UiPathは、1つのフォルダで成り立ち、中身はこんな感じです。
フォルダをつかわない主義の私としては、むむむ……ですが。
アクティビティの追加
UiPathは、左側のActivitiesから、必要なコマンドを真ん中にドラックして組み合わせることでプログラミングできます。
他のプログラミング言語と異なり、敷居が低いのがRPAツールの特徴です。
まず、このアクティビティを追加しておきましょう。
図の赤丸で囲った「Manage Packages」をクリックすると、アクティビティのセットを追加できます。
アプリのようなものです。
ここでは、[Available]をクリックして、検索し、
UiPath.Excel.Activities
UiPath.Mail.Activities
UiPath.PDF.Activities
を追加しておきましょう。
(UiPath.Core.Activitiesは、最初から入っています)
Favoritesの設定
UiPathでは、多くのアクティビティから通常検索して探しますが、アクティビティ名を右クリックして「Add to Favorites」(お気に入りへ追加)をすると使いやすくなります。
今回の事例で使う次のアクティビティを追加しておきましょう。
Open Browser
Excel Application Scope
Read Range
Write Cell
Output Datatable
MessageBox
UiPathで交通費検索ロボット
UiPathで交通費検索ロボットをつくってみましょう。
全体の構造
全体の構造を確認すると、
・Excelから出発駅と到着駅を読み取る
・ブラウザ(Yahoo!路線情報)で検索
・Excelでその結果を書き込む
といった流れになります。
このうち、つくる順番としては、まず「ブラウザで検索」部分をつくり、それがそれがうまくいくようになってから、Excel部分をつくります。
ちょっとずつ、かんたんな部分からつくっていくのがプログラミングのコツです。
ブラウザを開き、Yahoo!路線案内にアクセス
ブラウザ(インターネットエクスプローラー)を開くのは、「Open Browser」です。
これをドラックして、ボックスに、
“https://transit.yahoo.co.jp”
を貼り付けます。
URLをダブルクォーテーション(“”)で囲まなければいけません。
ここでロボットを実行してみましょう。
実行は、F5です。
実行して、ブラウザが起動し、Yahoo!路線情報が出てくれば、うまくいったということになります。
出発駅、到着駅を入れ検索をクリックし、料金を表示
次にブラウザの操作部分をつくっていきます。
ここは、Webレコーディング(ブラウザでの操作を記録してくれる機能)を使ったほうが楽です。
メニューの[Recording]→[Web]をクリックします。
このようなメニューが表示されるので、さらに[Record]をクリックしましょう。
ブラウザの部分部分を選択できるモードに変わります。
[出発]のボックスをクリックし、このようなボックスが出てきたら、駅名を入力します。
ここでは「お台場海浜公園」です。
(任意のものでかまいません)
同様に、到着のボックスにも、駅名を入力し、さらに[検索」をクリックします。
この画面になったら、レコーディングメニューの[Save&EXIT]をクリックし、レコーディングを終了しましょう。
ちょっとずつ記録するのがポイントです。
UiPathを見ると、このように記録されています。
出発駅は、「INPUT sform」、到着駅は、「INPUT sto」、検索ボタンは「INPUT searchModule~」となっていればOKです。
うまくいかない場合は、Deleteキーで消して記録しなおしたり、移動させたりコピーさせたりすることができます。
F5キーで実行してみましょう。
ブラウザが起動し、検索してこの画面になれば成功です。
次はこの表示された料金を読み取ります。
ブラウザに表示された料金を読み取る
データの読取は、UiPathで[DataScraping]をクリックします。
こういったボックスが出ますので、[Next]をクリックして、料金の最初の要素(ルート1)をクリックします。
319円のすぐ左ではなく、ちょっと左で大きめにとれるように選択するのがポイントです。
クリックすると、このように「次の要素を選んでください」と出ますので、ルート3の金額をクリックします。
この画面は、そのまま[Next]を選びましょう。
このように、読み込んだデータが表示されます。
1つだけ読み込むよりもこうやって全体で読み込んだほうが楽です。
[Finish]をクリックすると、
このように「次のページにもデータがありますか?」と出るので、[No]を選びましょう。
UiPathでは、このように記録されています。
どう読み取ったか確認してみましょう。
ここで、プログラムを整理しておきましょう。
「検索ボタンをクリック」の下に「データ抽出」がくるように、マウスでドラッグして動かします。
その後に残った、Attach Browerは、削除しましょう。
Attach Browerで最初に検索した経路を記録しまっているので、その後検索したときに不都合なのです。
(一気に記録すればこの問題は起きませんが)
[Extract~」という部分をクリックすると、右側のPropertiesに、ボックスが表示され、[Output]には、[ExtractData]とあります。
これは、読み取ったデータを[ExtractData]という箱に保存しているという意味です。
その保存された[ExtractData]を次の部分で使います。
つかうのは、[Output Data Table]と[Message box]です。
ドラックしましょう。
[Output Data Table]は、読み取ったデータを文字列に変えることできます。
(UiPathは文字か数値かで扱いが変わるので変更しなければいけないのです)
[Output Data Table]の右側のPropertiesのINPUTに[ExtractData](「e」を打てば出てくるはずです)を入れ、OUTPUTにどうやって出力するかの名前を指定しなければいけません。
[ExtractData]はUiPathがつけてくれた名前なのでUiPathも知っています。
ただ、このOUTPUTで人がつける名前をUiPathに知りません。
そのため、登録してUiPathに知らせる必要があります。
「あれをくれ」と言っても、「あれ」がわからなければ人と人の会話も通じません。
「あれ」とは何かをまず伝える必要があります。
同様に、ここで、登録しましょう。
この登録は、OUTPUTの欄で、Ctrl+Kを押し、「Set Name」と出てから入力します。
ここでは、「ExtractOutput」(読み込んだものの出力)と名付けましょう。
いわゆる変数というものです。
Excelマクロでは、「Dim 〇〇」と名付けます。
こう名付ければ、次の[Message box]で、[ExtractOutput]が使えるのです。
実行してみると、こういうメッセージボックスが表示されます。
ちゃんと、料金が読み取られていました。
なお、このメッセージボックスは、確認できればあとはもう必要ありません。
Deleteで消してもいいのですが、該当の[Message box]を右クリックして[Disable Activity]を選択すれば、実行時に無視されます。
ショートカットキーはCtrl+Dです。
Excelマクロでは、「’」(シングルコーテーション)をつけます。
このように「Comment out」となります。
Excelを開き、出発駅、到着駅を読み取る
ここまでできたら、次のExcelの部分です。
サンプルをこちらからダウンロードできます。
EX-ITサンプル 交通費ロボ.xlsx
Excelファイルを開くには、[Excel Application Scope]をつかいます。
ファイル名は、…をクリックすると選択できるようになるので、選択すると確実です。
そのファイルでやるべきことは、データの読み取り。
ここでは、[Read Range]を使います。
ドラックして、左側のボックスにシート名「”Data”」(ダブルコーテーションが必要)を入れ、右側のボックスに範囲名を入れるのですが、初期設定のまま「””」にしておきます。
この判明が「””」なら、シートにあるデータをすべて読み取ってくれるのです。
これは他の言語やロボットと比べても楽な部分と言えます。
[Read Range]をクリックして、Propertiesを見てみると、Outputが空白です。
ここでも名前をつけましょう。
OutputでCtrl+kを押し、
「ExcelTable」と入れます。
先ほどと同様に、[Output Datatable]と[MessageBox]を入れて、実行してみましょう。
サンプルだとこのように表示されます。
先ほどと同様に、[MessageBox]をコメントアウトしておきましょう。
さらには変数[ExcelTable]の設定をします。
このままだとロボット全体で使えないからです。
右下の[Variables]をクリックし、[ExcelTable]のScopeを[Sequence]にします。
これでこのロボット全体で、[ExcelTable]を使えるようになるのです。
読み取った出発駅、到着駅を入れ検索をクリック、料金を読み取る
この読み取ったデータをブラウザに入れる処理を入れます。
UiPathの出発に、「ExcelTable」と入れましょう。
さらには、
「ExcelTable(0)(1).tostring」
と入れます。
これは、テーブルからデータを選んで、文字列にする命令です。
Excelから読み取ったデータは次のようなもので、プログラムでは通常、0から数えます。
ExcelTable(行)(列)で読み取れますので、ExcelTable(0)(1)は、0行目の1列目、つまり出発駅「お台場海浜公園」なのです。
日付、出発・・・は読み取らないのかと思われるかもしれませんが、これは見出し行で通常読み取りません。
データ行の最初が0になるのです。
同様に、到着駅は、ExcelTable(0)(2)で0行目2列目、新橋となります。
実行してみてこうなればOKです。
読み取った料金をExcelに書き込む
最後のパート、Excelへの書き込みです。
Excel Application Scopeで、ファイルを開き、
[Write Cell]で、左側のシート名を「”Data”」、右側のセル名を「”E2″」にします。ブラウザから読み取ったデータは、[ExtractDataTable]に出力されていますので、
書き込む数値は、「ExtractDataTable(0)(0).tostirng」と指定します。
こう読み取れており、この場合は見出しを数えないので0行0列目です。
実行するとこうなりました。
一見成功ですが、Excel上では、円がついていると文字列になり、計算に使えません。
「319」と入ってほしいものです。
UiPathでは、こういったことができます。
「ExtractDataTable(0)(0).tostirng.replace(“円”,””)」
円を空白に置き換えるというプログラムです。
UiPathの特徴としてこういったプログラム(VisualBasic)を使えます。
実行すると無事入っていました。
完成したら違う駅名を入れてみていただければ。
プログラムを変えれば、複数行の処理もできます。
そうすれば、何万行あってもロボットが楽々やってくれるわけです。
Excelのデータを複数行読み取る
では、Excelデータから複数行を読み取って、繰り返し検索し、金額を書き込むようにプログラムを変えてみましょう。
さきほど、[Read Range]で、このように設定していれば、シート「data」のすべてのデータを読み取ってくれます。
複数行になっても、プログラムは変えなくていいのです。
繰り返し、サイトで検索する
繰り返し部分をつくっていきます。
UiPathで、テーブル(Excel)の繰り返しは、[For Each Row]です。
ドラッグして、「ExcelTable」を指定します。
(rowは最初から入っていますのでそのままで)
その[For Each Row]の中に、これまでつくった、[OpenBrowser]から[WriteCell]までを入れましょう。
出発駅、到着駅の部分を、繰り返しに対応するよう、書き換えます。
[For Each Row]の中では、
row(列の見出し).ToStirng
で、その見出しのデータを指定できるのです。
こういう見出しなので、
row(”出発”).ToString
row(“到着”).ToString
となります。
繰り返し、Excelへ書き込む
書込み部分も繰り返し対応に書き換えます。
最初は、セルE2、次にセルE3、セルE4・・・と書き込んでいくので、E列の2、3,4と1つずつ増やしていけば、繰り返しに対応できると考えましょう。
[Write Cell]の”e2″を次のように書き換えます。
RowNumberは、変数です。
右下の[Valiables]をクリックして、変数を登録し、Default欄に「2」といれます。
これは、2からはじまる、つまりセルE2からはじまるという意味です。
その下に、[Assign]を入れて、次のように入れます。
これはプログラミングでよく出てくる表現です。
RowNumber= RowNumber+1
〇=△で、「〇に△を入れる」なので
RowNumberに、RowNumber+1を入れる
という意味になります。
最初は2なので、
RowNumberにRowNumber(2)+1を入れると、結果的にRowNumberは、3となり、
繰り返すと、次の”e”+RowNumberは、セルE3です。
以降、E4、E5・・と、データの数だけ繰り返してくれます。
なお、WinAutomationはこういった画面です。
見た目は、UiPathのほうがとっつきやすいのですが、WinAutomationのほうが組み立てやすく感じます。
どちらもある程度のプログラミング的考え方は欠かせません。
動画もつくってみました。
横浜トライアスロンで水中を撮った映像、SDカードが破損していてダメになりました。
復旧を試しましたが、ダメで。
山下公園そばの海、年々きれいになっている気がします。
今年は、結構深いところまで見えました。
昔出たときは、真っ黒で手も見えない時期もありましたし。
成分的にはどうかわかりませんが、
【昨日の1日1新】
※詳細は→「1日1新」
A-Saas体験利用
SDカード復旧ソフト
【昨日の娘日記】
昨日は、「おいしい?」と聞くと、「おいちー」「ちー」と。
カメラを向けるとあまり言ってくれませんでしたが。
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方