スポンサーリンク

UiPath(RPA) と UWSC(Windows マクロ)の比較、 Excel シートの内容をメモ帳に書き出す場合


以前より使っている Windows マクロ作成ソフトの UWSC と、最近流行っている RPA ソフトの UiPath の操作比較をしたいと思います。

いずれのツールも画面操作を自動化することができるものですが、両者は以下の点で異なります。

●UWSC はプログラミング

●UiPath はプログラミングの考え方を必要とするツール

これらのツールの魅力は本来は連携できないツール同士を連携できることです。

さて、今日は Excel シートの内容をメモ帳に書き出す操作について UiPath(RPA) と  UWSC の両方のツールを比較します。

色々と応用を効かせることができる内容だと思っています。 (まぁ、今回の内容は本当言ってしまえば Excel VBA のみでも可能なことではありますが。。)

スポンサーリンク

1、今回行う作業内容

今回行う作業の内容を以下に書きます。

Excel シート(ファイル名「Test.xlsx」)の中の「テスト」シートの中にある毎月の売上高のデータをメモ帳に書き出す作業を自動化したいと思います。

A列に「月」、B列に「売上高」を12ヶ月分並べてあります。

Excel売上表

上記のシートの A列(月)、B列(売上高)のの内容をメモ帳に書き出します。

Excel シートとメモ帳の両方を PC 画面上に開いた状態で実行することとします。

Image(10)

Excel 内部の操作であれば VBA のみを使って自動化できますが、このように異なるアプリをまたぐ操作の自動化ではUWSC や  UiPath(RPA) を使わなければなりません。

今回の例そのものを直接的に何か使うケースがあるかと言えば??ですが、アプリ間をまたぐ操作を自動化する上で色々と応用を効かせることができる内容だと思っています。

2、UWSC  でExcel シートの内容をメモ帳にコピペする方法

まずは UWSC から行きたいと思います!

UWSC コードはメモ帳に書き込んで「.UWS」の形式で保存する必要があります。

UWSC  コード

以下のコードを書き込みます。

UWSC コード説明

上記コードの内容を説明します。

GETACTIVEOLEOBJ 関数

GETACTIVEOLEOBJ 関数は既に起動しているオブジェクトを操作するために使います。

以下のように記述して使います。

GETACTIVEOLEOBJ(”オブジェクト名”)

今回はオブジェクトとして Excel を指定するのでオブジェクト名を”Excel.Application”としています。

そして、以下の式でそのオブジェクトを変数「ExcelObj」に入れ込んでいます。

ExcelObj = GETACTIVEOLEOBJ(“Excel.Application”)

GETID 関数

GETID 関数はウインドウの ID を返す関数です。

以下のように記述して使います。

GETID(ウィンドウ名)

既に開いているメモ帳のウインドウ名を取得する場合には GETID(“メモ帳”) のように記述します。

そして、取得したメモ帳の ID を変数「NoteID」に入れ込んでいます。

ちなみに新たなメモ帳を作成して ID を取得して変数に入れ込む場合には、

NoteID = EXEC(“notepad”)

と記述する必要があります。

以下のサイトが大変参考になります。

http://canal22.org/kansu/ctrlwi/
http://uwsc.wpblog.jp/?p=240

FOR 文を使った繰り返し作業

さて、UWSC の繰り返し作業には FOR 文を使います。

(VBA と似ててやりやすいですね。)

FOR 文は以下のように記述して使います。

使う変数を i とします。

FOR 変数 = 開始値 TO 終了値     処理 NEXT *VBA と異なり NEXT の後に i を記述する必要は無いので注意して下さい。

今回の場合は、Excel 上の4月~3月の12ヶ月分のデータを1行ずつメモ帳に書き出すので

・変数を i

・開始値を 1

・終了値を 12

としています。

12回同じ作業を繰り返すということですね。

そして、「処理」の部分では各月ごとの Excel シート上のデータをメモ帳に書き出す作業を行っているのです。

以下で12回繰り返す FOR 文の中身について説明します。

Excel シート上のセルの値を変数に入れ込む

Excel シート上のセルの値は次のように記述して指定します。

オブジェクト名.エクセルシート名.セル名.Value

今回は

・操作対象は一番最初で作った Excel オブジェクトなので「オブジェクト名」は「ExcelObj」

・現在開いているシートを対象としたいので「エクセルシート名」はアクティブになっているシートを表す「ActiveSheet」

・セルの指定は変数 i を用いて月のセルを Cells[i+1,1]、売上高のセルを Cells[i+1,2]

としています。

セルの指定は行番号、列番号を以下のように指定します。

Cells[行番号,列番号]

i を 1~12 まで変化させることで

・月については Excel シート上のセル「A2~A13」

・売上高についてはExcel シート上のセル「B2~B13」

の値を読み込んでいます。

こうして1行ずつ読み込む値は変数に入れ込んでその都度メモ帳に書き出しているのです。

Excelからメモ帳へ1行ずつ書き出し

変数に読み込む部分は以下の部分です。

月↓

Excel_Tsuki = ExcelObj..Cells[i+1,1].Value

売上高↓

Excel_Uriage = ExcelObj.ActiveSheet.Cells[i+1,2].Value

SENDSTR 関数

メモ帳に書き出す際には SENDSTR 関数を用いて先に取得してメモ帳の ID を使って書き出し先を指定しなければいけません。

SENDSTR 関数は文字列を書き出す関数です。以下のようにして使います。

SENDSTR(ID 番号, 文字列)

今回の場合は、書き出し先はメモ帳になるのでメモ帳の ID 番号(NoteID)を使います。

書き出す内容は「月」「売上高」の2つです。

月を書き出す部分↓

先に読み込んだID 番号 NoteID と「月」のデータ Excel_Tsuki を使います。

SENDSTR(NoteID, Excel_Tsuki)

売上高を書き出す部分↓

先に読み込んだID 番号 NoteID と「売上高」のデータ Excel_Uriage を使います。

SENDSTR(NoteID, Excel_Uriage)

KBD関数 TAB キー、ENTER キーを押す

KBD関数はキーボード操作を行う関数です。

以下のように記述して行います。

KBD(キー名)

メモ帳に書き出す際に「月」と「売上高」の記述に間隔を空けるために TAB キーを使います。

その場合キー名を「VK_TAB」として以下のように書きます。

KBD(VK_TAB)

メモ帳に「月」を書き出した後にこの関数を入れて間隔を開けています。

月と売上の間隔

メモ帳に1月分のデータを書き出したら改行するために ENTER キーを使います。

その場合キー名を「VK_ENTER」として以下のように書きます。

KBD(VK_ENTER)

メモ帳に「売上高」を書き出した後にこの関数を入れて改行しています。

改行

UWSC コードの実行

さて、このようにして作り上げだ UWSC コードを実行した動画がこちらになります。

コードの実行方法についてはこちらの記事を参考にして下さい↓

わりと早く書き出し作業が終わる様子が分かると思います。

Excel 画面上で VBA を使って操作を実行する方法

Excel 画面上で VBA を使って操作を実行することもできます。

以下のように Excel シート上にボタンを設置して、そこに今回の UWSC コードを実行する VBA を組み込んでおきます

(すみませんが、VBA コードは今回は割愛させて頂きます。)

Excel売上高表

こうすれば Excel 上でワンクリックするだけでデータをメモ帳に書き出すことができます。

3、UiPath  でExcel シートの内容をメモ帳にコピペする方法

さて、次は UiPath を使って同じことを行いたいと思います。

UiPath では画面左側の「Activities」から必要な項目を選択して作業を作り上げて行きます。

UiPathの画面

今回の全ての操作は次のようになりました。最初に示しておきます。

全ての操作

以下で上記の操作1つ1つについて説明して行きます。

Excel を操作対象にしてファイル名を指定、シート名と範囲を指定

まず最初に Excel を操作対象にします。

Activities から「Excel application scope」をドラッグしましょう。

Excel application scope

次に、Excel シートからデータを読み込むためにActivities から「Read Range」を上の画面の「Do」の中にドラッグします。

Read Range

そして、以下のように

・ファイル名(選択して指定)

・シート名

・セルの範囲

を指定します。

範囲については、「””」と入力することで、指定したシート上の全ての範囲を読み込むことになります。

私は今回 Excel ファイル名を「Test.xlsx」としてあり、シート名を「テスト」としてあります。

Read Range設定

なお、ここで読み込んだセルの範囲のデータを後々使うために画面右側の「Properties」の設定をしておきます。

Output の「Data Table」のボックスを選択して「Ctrl + K」を押してから名前を入れましょう。

私は今回「test」と名づけました。

また、Options の「Add Headers」にチェックを付けることで Excel シート(名前は「テスト」)の先頭行を見出しとして扱うようになります。

Add Headers

シートから1行ずつ読み込んでメモ帳に書き出す作業

次にシートから1行ずつデータを読み込んでメモ帳に書き出す繰り返し作業を行うための設定を行います。

Activities から「For each row」をドラッグしましょう。

以下の画面が出てくるので「row」と「test」を入力します。

なお、「test」は先に Output の「Data Table」で今回私が名付けた名前です。

名前によっては受け付けられないものもあり、基準がよく分かりません。。。

(test はエラーが出ませんでした)

「Body」の中に繰り返し行う作業を表記します。

For each row

以下の内容は繰り返し行うことなので、全て上図の「Body」の中に表記することとなります。

画面録画

上記の繰り返し作業として「Body」の中に入れ込む作業を設定するために、レコーディング機能でメモ帳に書き込む操作を記録します。

「Recording」の「Desktop」を選択します。

Recording

続いて「Record」を選択して、画面録画できる状態にしましょう。

Record

この状態で、既に開いてあるメモ帳(ファイル名「メモ帳テスト.txt」)に「123」と書き込んでみます。

メモ帳書き込み

ここで録画を終了(Esc ボタンを押す)して、「Save & Exit」をクリックします。

Save & Exit

すると今の操作が記録されてきます。先に「123」と入力した部分は以下のように表示されます。

メモ帳の記録

上記の入力(123)を今回準備した Excel シート上の値に置き換えてあげればよいわけですね。

メモ帳に「日付」を書き出し

まず、メモ帳に「日付」を書き出します。

日付は Excel シート上↓で見出しが「月」となっている列(A列)に表記されています。

Excel売上高表

先頭行を見出しとして設定してあるので、「Type」のボックスに「row(“月”).ToString」と入力します。

(「123」と入力してあるのを書き換える)

Type月

これにより、A列の2行目以下が書き出されていきます。

TAB キーを押す

さて、「月」を書き出したら次に「売上高」を書き出す前に間隔を空けるために「TAB」キーを押します。

Activities の「Send Hotkey」をドラッグして「key」で「tab」を選択しましょう。

tab

メモ帳に「売上高」を書き出し

次に先の「Type」をコピペ(Ctrl + C → Ctrl V)して、ボックスの中を書き換えます。

売上高の列なので「row(“売上高”).ToString」とします。

Type売上高

ENTER キーを押す

次に、次の月の読み込みをする前に改行するために「ENTER」キーを押します。

Activities の「Send Hotkey」をドラッグして「key」で「enter」を選択しましょう。

ENTER

UiPath(RPA) 実行

さて、このようにして作り上げだロボットを実行した動画がこちらになります。

書き出し作業は UWSC よりも時間がかかりますかね。

4、まとめ

さて、今日は Excel シートの内容をメモ帳に書き出す場合について UiPath(RPA) と  UWSC の両方のツールを比較してみました。

UWSC はずっと前から使っていたので「こんなもんか!」という感覚はありましたが、UiPath(RPA)は初めてです。

今回の操作については、UWSC の方が早いですね!

ただ、この記事で詳しくは書きませんが UWSC は独特の不安定さがあり、操作が上手く再現しないこともあります(今回の事例ではない)。

UiPath(RPA) と  UWSC 両者を比較しながら、どちらをどのように使うのが良いか色々と試して行きたいですね。