UiPath_エクセルでセルの色を塗りつぶしたいな～

## 初めに
①今回紹介するUiPathの情報は以下の通りです。
■Community Edition 2022.4

②この内容は、2022/8時点の情報です。

## エクセルでできること
UiPathではエクセルに関する操作が豊富です。
例えば、指定位置のセルを読込や書込、データテーブル型のデータを書込、マクロ処理の実行など多岐にわたります。


## 色を塗りつぶすには
ところで、エクセルをお使いの際に「セルに指定した色を付けたいんだよな～」という思いが芽生えたことはありますか？
(全員そうとは限らないけれど)

よし、UiPathで色を塗ってみよう！

## UiPathでの実装方法
私の中では、概ね以下のやり方を思いつきました。
方法1：エクセルを開いて、GUI操作で塗りつぶし
方法2：「セルの色を取得」→「範囲の色を指定」アクティビティで塗りつぶし
方法3：色の番号を別途どこかに格納し、「範囲の色を指定」アクティビティで色の番号を出力して塗りつぶし


## 方法1：エクセルを開いて、GUI操作で塗りつぶし

ただ、やっぱりここは自動化を発信するブログなのだからもっとかっこよく(？)動かしてみたいですよ・・・ね？(謎の圧力)
ということで、ボツにしました。


## 方法2：「セルの色を取得」→「範囲の色を指定」アクティビティで塗りつぶし
以下の2つの色に関するアクティビティを使って、エクセルファイルの任意の範囲に色を塗ってみましょう。

### ①GetCellColorアクティビティ(セルの色を取得)
指定したセル位置にある色を取得するためのアクティビティです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/05775340-7acd-e4d7-9eb4-cf71944cbc61.png)


プロパティはこんな感じです。
【入力】
シート名：String変数
セル　　：String変数
【出力】
色　　　：Color変数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/8c7cae9d-4068-86a8-7c74-e5afacde6de2.png)

### ②SetRangeColorアクティビティ(範囲の色を設定)
指定のセル範囲に指定する色を塗りつぶす為のアクティビティです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f46c71f3-70b8-e3e5-c792-586310633e01.png)

プロパティはこんな感じです。
【入力】
シート名：String変数
セル　　：String変数
色　　　：Color変数

色の変数はColor変数に格納したものを持ってくる
または
color.FromArgb(A,R,G,B)*
で書いてもOKです。
*A,R,G,Bの部分はいずれもInt32(数値)が入ります。
　入る数字はいずれも0～255の範囲の任意の数字です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/b31ac14d-3d6e-1ffc-9986-310cc5b4355c.png)


----------------------------------------------------------------------------------------
### やってみよう
実際にセルの色を取得してみましょう。
以下のサンプルロボットを作りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/e9ac4385-7e65-1f2b-2021-7f63b8d487cd.png)

エクセルファイル(ファイル名：Book1.xlsx、以下エクセル)を用意し、以下のシート「色2」のB1セルに色を設定しましょう。(今回は黄色にします)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/9290f651-ce6c-92fd-782e-9a3ea43442a2.png)

そして、シート名「Sheet1」のA2:B2の範囲に色が付くか試してみましょう。
(初期設定は塗りつぶしなし)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f62f3c16-6be2-80ce-eea7-db332c1ce3a3.png)

では、実行してみると...![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/a200b89b-a9d6-a92d-f2a8-504efbb6a043.png)
よし、黄色である<b>Yellow</b>が出ましたー！
パチパチパチパチ！
エクセルにも黄色、ついていますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/4769f08c-05a9-96fe-37f7-b2c518500461.png)


では、どんな色でも出るのか試してみましょう。
エクセルを開いて「ホーム」→「塗りつぶしの色」を押下、「ユーザー設定」のタブを開いてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/a5bed962-f431-2baa-ff41-96fc3b04490f.png)
なんでもよいのですが、今回は「ミントグリーン」っぽい色をB1セルに設定してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/fafedffc-ac14-b243-f9ca-692a2ccad4bf.png)

これで先ほどと同様に実行すると、どうなるのでしょう？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/8e788d98-da91-6917-9b2d-f74a125cfc54.png)
なんと、色名でない何かが出てきました！
(結局、色名はなんだったのだろう。。。悶々)

## 方法3：色の番号を別途どこかに格納し、「範囲の色を指定」アクティビティで色の番号を出力して塗りつぶし
ということは、方法2をうまく活用すればもっと細かく色を指定できるのでは？
と筆者は考えた。。
「色に関する数値をどこかから取得して、その数字を設定するとどうなるのか」
見てみましょう。

こんな感じでロボットを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f1251d29-eddb-b1a3-7b6f-eaa1e2c1afe3.png)
※Excelの読込時は、数字の部分がDouble型と思われないよう「表示形式を保持」にチェックを入れておきましょう。(実はチェックを入れ忘れ、エラーが出た)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/b6ccc9ba-5cd5-72b4-8fb3-2d2fa595a97b.png)


SetRangeColorアクティビティの「色」欄には、以下のように書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/d7d532d4-a1b2-5fa9-6370-a987f7b93ec1.png)
※式の意味は後述の【補足】で説明します。
　エクセルから取得した際の変数が文字列の為、CIntを使い文字型から数値型へ変換しています。


方法2でも使用したエクセルを開き、今度はシート「列1」に先ほどのミントグリーンみたいな色の番号を2行目に書いてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ae5c2051-8507-bd6d-7e3c-a37ee882b61b.png)

エクセルは保存&シート「Sheet1」の色を初期化(塗りつぶしなし)後に実行。結果は...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/681400c0-f49c-1fdb-434d-c9fa748a2e35.png)
で・き・て・る！
よかったですね！


## 【補足】Color変数って何？
Color変数はざっくりいうと、色に関する変数のことです。

色名がはっきりしている場合は、「<b>Color [(色の名前)]</b>」で色名を取得できます。
ただ、ちょっとオリジナルな色を設定すると色の名前が出てこないのですが、代わりに「<b>Color [A=xxx, R=xxx, G=xxx, B=xxx]</b>」の表記で出てきます。

なお色の構成は
A：アルファ要素(要するに透明度)
R：Red(赤)
G：Green(緑)
B：Blue(青)
です。
※A,R,G,BはいずれもInt32(数値)が入ります。
　入る数字はいずれも0～255の範囲の任意の数字です。

### Color.FromArgb メソッド
.Netの公式レファレンスによると、4つの8ビットARGB 要素 (アルファ、赤、緑、青) 値から Color 構造体を作成するものです。
要するに、色名がわからない(オリジナルで生成した色)場合はここからColor変数に置き換えて色をつけることが可能です。

<b>color.FromArgb(アルファ要素の数字,赤の数字,緑の数字,青の数字)</b>
※数字の部分はInt32型です。

Color変数で取得した時に「この色はBlue」と色名がはっきりしている場合はいいのですが、色名が決まっていない(というか自分で細かく設定した結果、色名が決まってなさそうなカラーがある)場合は番号で設定するのががいいのかなと感じました。

詳細は、.Netの公式レファレンスをご確認ください。
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.color.fromargb?view=net-6.0



## まとめ

今回はUiPathでセルの色を取得して、無事2つの方法を使ってセルを塗りつぶすことができました！
他に効率の良い方法があるか、他のRPAツールでもできるのかは調査しないといけませんが、覚えて損はしないと思います。
機会があればぜひやってみてくださいね！

最後までお読みくださった皆様、ありがとうございました！