Power Automate for desktop「Excelセルに条件書式を設定」

## 概要

[前回](https://qiita.com/sys_zero/items/d0584ae9cbe1498a1332)に続き、視認性を高めるため条件によってセルの背景に色付けします。VBScriptの実行アクションを使い、複数起動しているExcelブックから任意のExcelワークシートの列に条件書式を設定します。
![Convert.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/4d7fa05a-ff54-0331-f657-03f04eea4474.gif)


## 環境

- Windows ~~10 Pro 21H2~~  11 Pro 23H2
- Power Automate for desktop ~~2.16.215.22020~~ 2.46.263.24194 インストーラー版
- ~~Microsoft Excel for Microsoft 365バージョン2112ビルド16.0.14729.20254~~ Microsoft® Excel® for Microsoft 365 MSO (バージョン 2408 ビルド 16.0.17928.20114) 64 ビット 

## 注意等

- ~~Windows11では未検証です。~~
- あくまでサンプルとご理解ください。
- 自己責任でお願いします。
- ~~2022年1月~~2024年9月の情報です。

## 列に条件書式を設定して背景に色を付ける

%ExcelInstance%に1～100の乱数を10000個出力。50以上の場合セルに色を付けます。VBScriptで列に条件書式を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/47c5227b-b9c8-f9c7-a19e-234b878e9860.png)

1. 乱数の生成
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/b7d482dd-7957-57a5-6fd0-e64e2f7d90f8.png)

2. Excelの起動
   %ExcelInstance%を起動
3. Excelワークシートに書き込む
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/0aadc068-93bb-2ad2-875c-66ad588a4f53.png)

4. VBScriptの実行
    ![vbs](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/050cad4f-4002-1ea5-d161-790ff6f0b516.png)
    
    FormatConditionsオブジェクトに、AddメソッドでXlFormatConditionTypeとXlFormatConditionOperatorを設定します。サンプルでは```(1,1,50,100)```としています。セルの値が50~100という意味の条件になります。
   
    FormatConditions
    
    <https://docs.microsoft.com/ja-jp/office/vba/api/excel.formatconditions>
    
    XlFormatConditionType
    
    <https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlformatconditiontype>
    
    XlFormatConditionOperator
    
    <https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlformatconditionoperator>
    
    ```VB:VBScript
    Option Explicit
    Dim XlApp
    Dim XlSheet
    Dim XlRange
    Dim XlCondition
    
    Set XlApp = GetObject("Book1").Application
    
    Set XlSheet = XlApp.Worksheets(1)
    Set XlRange = XlSheet.Range("A:A")
    '条件付き書式設定( 1=xlCellValue, 1=xlBetween ,50~100)
    Set XlCondition=XlRange.FormatConditions.Add(1,1,50,100)
    XlCondition.Interior.Color = RGB(184, 41, 117)
    
    Set XlCondition = Nothing
    Set XlRange = Nothing
    Set XlSheet = Nothing
    Set XlApp = Nothing
    ```
    
5.　Excelを閉じる 
    %ExcelInstance%を閉じる


## まとめ

条件書式を設定することができました。他にも列や行の幅を変えたりといろいろできます。スクリプトをフロー内で管理できるのは良いです。

## 2024年9月追記

セルに色を付けるアクション「Set color of cells in Excel worksheet」が実装されています。VBSを使わなくてもセルに色付けすることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/8a23d814-cd8b-89a3-cecd-08ab3b4c7b5b.png)


## おまけ
2024年9月現在は解決されています。

~~Excelの起動アクションを使った後、Excelを閉じるアクションを使わず閉じるボタンで終了させていると、プロセスが終了せず、どんどんたまります。「新しいExcelプロセスの配下にネストする」がONの場合ひどいことになります。~~
![e1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/e01fab76-f4d7-436c-9803-e2ba7e3abe43.png)

~~コマンドプロンプトで```tasklist /v /fi "IMAGENAME eq excel.exe"```などとするか、タスクマネージャーで確認できます。プロセスが残っている場合、たとえばVBScriptの実行アクションにGetobject(, "Excel.Application")を使っていたりするとエラーになります。~~
![e2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/978d4827-6aab-94c3-b323-19be33ba8ea1.png)

~~フローを初期化するときに~~
![e3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/e188b570-29c6-64c7-9fab-88cd67237051.png)

~~などとしてあげるとよいかもしれません。~~

## 参考
FormatConditionsについては

https://docs.microsoft.com/ja-jp/office/vba/api/excel.formatconditions

XlFormatConditionTypeについては

https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlformatconditiontype

XlFormatConditionOperatorについては

https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlformatconditionoperator