やりたいこと:Excelのデータを読み込んで1行ずつ処理を行う
Excelファイルに以下のようなデータが格納されているとします。
点数が70点以上であればD列の結果にに"合格"を記入し、
それ以外の場合は"不合格"を記入する処理を行いたいと思います。
【処理の流れ】
1.Excelファイルを開く
2.ファイル内のデータを読みこむ
3.1行ずつ処理を行う
4.点数が70点以上という条件を設定する
5.判定結果の処理を設定する
6.判定結果をExcelファイルに書き込む
【使用するアクティビティ】
1.ExcelApplicationScope
2.ExcelReadRange
3.ForEachRow
4.If
5.Assign
6.ExcelWriteRange
1.Excelファイルを開く
まず始めにExcelファイルを読み込むためにExcelApplicationScopeというアクティビティを使用します。
赤枠内には読みこむExcelファイルのフルパスを入力します。
ダブルクォーテーションで囲むことに注意してください。
✔プロパティ
基本的にはデフォルトで入っているチェックで問題ありません。
可視にチェックを入れるとRPA起動後、画面上にExcelが立ち上がり、操作中の動きが見える状態になります。
チェックを外すと裏で操作を行うので、画面上は何もしていないように見えます。
※私の場合はチェックを外した方が処理が速い気がするので外しています。
お客さんによってはロボットが処理していることが目に見えた方が良いという方もいるのでどちらが良いかは場合によると思います。
2.ファイル内のデータを読みこむ
Excelファイルを開いた後は中にあるデータを読み込むためExcelReadRangeアクティビティを使用します。
Mainシートの赤枠内はExcelのシート名(今回は合否判定)を入力します。
シート名入力の横にある枠には、読みこむセルの開始位置や読み込み範囲を
A2やA1:D6のように指定します。
今回のように空白にするとA1から読みこみます。
✔プロパティ
ヘッダーの追加にチェックを入れると読み込んだデータの1行目はタイトル行であると自動的に判定してくれます。
基本的にはチェックを入れておきましょう。
出力プロパティには読み込んだデータをデータテーブル型の変数に格納することができます。
今回はdtテスト結果という変数にデータを格納しています。
変数の設定は変数タブより行います。
ここで変数の設定をしておかないと、出力プロパティに入力してもエラーとなります。
変数の型をクリック後、「型の参照」をクリックすると以下の画面になるので、
datatableと検索して赤枠内のDataTableを選択します。
変数dtテスト結果には以下のようなデータが格納されています。
ExcelReadRangeのプロパティでヘッダーの追加にチェックを入れているため、1行目は見出し行となります。
3.1行ずつ処理を行う
1行ずつ処理を行うためにForEachRowアクティビティを使用します。
1行ずつ処理を行いたいテーブルはdtテスト結果なので、
順番としては、まずコレクションにdtテスト結果を入力します。
要素にはデフォルトでrowが入力されています。
ここは自由に命名できるのですが、今回はrowテスト結果という名前を入力しています。
rowテスト結果には、データテーブルの行が行数分格納されているイメージです。
例えば1回目の繰返しでは、
2回目の繰返しでは、
このように行のデータが入っています。
これを頭に入れて後続の処理を進めていきます。
4.点数が70点以上という条件を設定する
繰り返し処理の中で条件の設定を行います。
条件分岐処理のIfアクティビティを使用します。
今回設定する条件は「テストの得点が70点以上かどうか」です。
条件式は赤枠内に記入している通り、
CInt(rowテスト結果("得点").ToString) >= 70となります。
rowテスト結果("得点").ToStringとすることで、得点列の値を取得することができます。
上記は文字列型として値を取得しており、70という数値型と比較するためには型の種類をそろえる必要があります。
今回はCIntで囲むことで文字列型から数値型に変換をしています。
5.判定結果の処理を設定する
70点以上であれば「合格」、それ以外は「不合格」を代入する処理を設定します。
代入は、Assignアクティビティを使用して
rowテスト結果("結果") = "合格"
rowテスト結果("結果") = "不合格"
と記述します。
("結果")とすることで、データテーブルの「結果」列を指定しています。
6.判定結果をExcelファイルに書き込む
Assinアクティビティで代入した段階ではまだdtテスト結果という変数に代入しただけなので、Excelファイルには反映されません。
Excelファイルに反映させるためにはExcelWriteRangeアクティビティを使用します。
ExcelApplicationScopeアクティビティの範囲内に設置が必要です。
ExcelReadRangeアクティビティではデフォルトでヘッダーの追加にチェックが入っていましたが、ExcelWriteRangeではデフォルトでチェックが外れているので、注意が必要です。
整えて完成
最後に全体を整えましょう!
赤枠内のようにそれぞれのアクティビティには名前をつけることができます。
エラーが発生したときにどのアクティビティで発生したのかがすぐにわかるので、アクティビティには名前をつける癖をつけておきましょう。
また、アクティビティが増えてくると余分なシーケンスができてしまいます。
不要なシーケンスは右クリックで「囲んでいるシーケンスを削除」を選択することで消すことができるので、極力不要なものは削除して見た目をスッキリさせることをおすすめします!
今回の処理の全体像を貼っておきます(^^)/
実行することで以下のようにExcelに書き込むことができます。
ひとこと
今回はExcelファイルを読み込んで処理を行いましたが、Excelでなくてもデータテーブル型の変数に格納できていれば様々な場面で使用することができます。
例えばデータスクレイピングと組み合わせることで、システム上のデータをデータテーブルとして読み込みForEachRowで繰り返すことなどもよく使う処理です。
データスクレイピングやその他のアクティビティの使い方についても今後紹介していきたいと思います。
また、こんな処理をしてみたいというご要望があれば実際にやり方を紹介したいと思っておりますのでコメントで教えていただけると嬉しいです!(^^)!