UiPathでBINGOロボットを作ってみた


UiPathでは、乱数を回すことにより、ランダムな数字を取得することが可能ですが、
その乱数の取得を生かして、UiPathでBINGOロボットを作ってみました。

従来、BINGOゲームでは通常数字をマシーンで取得し、BINGOシートと一致して縦横斜めにそろえば「BINGO！」となる楽しいゲームだと思いますが、
ここでは、マシーンの代わりをUiPathで作成しようと思います。

今回は、数字ではなく参加者から言葉（果物や、乗り物、今年も言葉など・・・）などを募り、リスト化（Excel）し、そのリストを入力データとして、行番号（数字）をロボットが乱数として回すというものです。また、画面表示としては、数字に紐づいた「ワード」を表示することが可能です。
数字ではなく、ワードを使うことができるので、より楽しさが増すのではないでしょうか。


それでは、作成方法等を以下のように説明します。
１．乱数の取得方法
２．乱数に紐づいた文字列の表示の仕方（DataTableの別の列情報を取得する）
３，BINGOゲームの作成方法


### １．乱数の取得方法

乱数の開始番号：StartNo　（変数型：Int32）
乱数の終了番号：EndNo　　（変数型：Int32）
#### 　New Random().Next(StartNo, EndNo)


例）BINGOロボットならば・・・
下記の表のように番号（NO）順に果物をリスト化した場合、
BINGOロボットには、30個の果物をランダムに表示して欲しいので、
乱数を取得する方法は以下となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/4959baa5-16bb-b872-f836-2ea3695ea8ac.png)



StartNo：１
EndNo：30
#### 　New Random().Next(1, 30)

変数に設定すれば
StartNo：１
EndNo：30
#### 　New Random().Next(StartNo, EndNo)


### ２．乱数に紐づいた文字列の表示の仕方

１でロボットがある変数にランダムな数字を取得することができますので、その数字に紐づいた言葉を取得する必要があります。
その方法を以下の順に説明します。


２－１．「ワード」のリストをDataTable（配列）として取得する
２－２．DataTableの中でのランダムな数字でフィルタリングする　※３で詳細説明
　　　　※ランダムな数字がNO列のどの行にあるかを特定する
２－３．フィルタリングされた行の「ワード」を取得する　※３で詳細説明



#### ２－１．「ワード」のリストをDataTable（配列）として取得する

Excelシートのデータを範囲で読み込みをしてDataTableとして取得する
※読み込み範囲を指定しなければ、シート内のすべてのデータをDataTable（配列）として、読み込むことが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/aa0142ad-aee8-32f3-f609-0a5641afc817.png)




### ３．BINGOゲームの作成方法

■準備ファイル（例：Excel）
・入力データ用シート：Input
・出力データ用シート：Output

入力シート：BINGOで表示したい「ワード」リスト
出力シート：ロボットが出力して言葉を毎回保存するシート

２つのシートを用意し、「入力シート」には「ワード」リストを、
「出力シート」にはロボットが出力した「ワード」を保存するようにします。
また、出力データは始める前に既存データをクリアする必要があります。


３－１．Outputデータの既存データのクリア
３－２．Inputデータの読み込み（DataTable）
３－３．Inputデータ（DataTable）のデータ数分の数字を乱数で取得（3-3～3-5：ループ処理）
３－４．乱数をOutputデータに書き込む
３－５．乱数に紐づいた「ワード」を表示する
３－６．乱数すべて表示されたら、最後に「BINGO!!」をメッセージボックスに表示する

※３－４、３－５のときのデータの確認や紐づいたデータを確認する際の方法には、データをループで一致するものを確認する方法もありますが、ここではDataTableとして取得し、フィルタリングする方法で作成しています。


#### フィルタリング・アクティビティ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/52f4f685-814c-7cd1-864d-0b8e8b41ea74.png)



#### 「フィルターを設定」の設定内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/9df39fe5-028f-e69f-1ff2-29a0a916adb7.png)

入力データのDataTable・変数名：dtOutput
フィルターリング後のDataTable・変数名：dtOutputフィルター

・フィルター前後のDataTableの変数は、変数名を変えれば検索のように使用することができます。
　フィルタリングされたかどうかは、以下のように確認ができます。
・「フィルターを設定」でランダムな数字がデータと一致する条件でフィルタリングする。
　フィルタリング結果は、行数で確認できます。

フィルタリング結果（変数型：Int32）：dtOutputフィルター.RowCount


#### ３－５．乱数に紐づいた「ワード」を表示する

Inputデータ（DataTable）のランダム数字に紐づいた「ワード」を取得するには、以下のように取得し、メッセージボックスで表示させます。

下記のようにデータ行の別の列を指定し、ランダム数字に紐づいた「ワード」を取得、メッセージボックスで表示します。

#### 　dtOutput.Rows("データ行番号").item("列名").ToString


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/7999fb4f-6fec-6fba-1c64-e121eef255d2.png)

メッセージボックス出力例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/e741b37c-d3e8-eb49-2ccd-4d41f5412d94.png)



#### ３－６．乱数すべて表示されたら、最後に「BINGO!!」をメッセージボックスに表示する



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3046355/52709830-6380-f719-1af1-b4dfeae6c3db.png)



このように、
パーティの時など、「ワード」をその時のテーマや、関連のワードを募集するなどして、また、BINGOカードにはそれぞれすきな箇所にワードを記入することにより、より楽しいレクリエーションになるのではないでしょうか。


#### さいごに

UiPathをはじめRPAツールは、業務の自動化や業務改革など、さまざまなシーンで利用されていますが、技術を応用し、ちょっとした遊び心に使ってみるのも勉強になるかと思います。
また、業務への関心や、アイディアの構想にもつながるのではないでしょうか。
楽しみながら業務へ生かせたら、なんて素晴らしいことでしょう。