Power Automate for desktop「Excelセルの背景に色付け」

## 概要

Power Automate for desktopを利用して何らかの入力作業をおこなうとき、返される結果をExcelに出力することがあります。確認作業がある場合、視認性を高めるため条件によってセルや文字の色を変えたいところです。さまざまな方法がありますが、今回は「VBScriptの実行」アクションを使います。複数起動しているExcelブックから任意のExcelワークシートに色付け処理をします。
![cell.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/1b986143-4f6b-cd18-2d64-6e928020fcd3.gif)


## 環境

- Windows 10 Pro 21H2
- Power Automate for desktop 2.16.215.22020
- Microsoft Excel for Microsoft 365バージョン2112ビルド16.0.14729.20254

## VBScript

VBScriptリファレンス

<https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc392193(v=msdn.10)>

## 注意等

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

## フロー

Excelを2つ起動し、意図したインスタンス（サンプルフローでは%ExcelInstance2%）に作業します。1～100の乱数を20個出力し、50以上の場合、セル背景に色付けします。

![flow](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f7bb3a93-10c9-ccaf-dec0-029422c7f764.png)


1. 特別なフォルダーを取得
   ![01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/9a4babb8-f4f2-f894-8243-5393e3c7ebe1.png)

2. Excelの起動
   1つめの空ドキュメントとして%ExcelInstance1%とします。
   ![02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/5b115c9e-bdb9-0d23-fb9a-061fc4ebc8e6.png)

3. Excelの起動
   2つめの空ドキュメントとして%ExcelInstance2%とします。
   ![03](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/10de183f-3b12-ca25-554c-c062da196edd.png)

4. Loop
   今回は1~21まで20回ループします。
   ![04](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/2ca116b1-fec4-e015-7dc5-1c5611c0ae87.png)

5. 乱数の発生
   1~100の乱数を発生させます。
   ![05](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/470db37e-fc11-410d-ac2b-7bc3b9388720.png)

6. Excelワークシートに書き込み
   乱数%RandomNumber%を%ExcelInstance2%のA列に書き込みます。
   ![06](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/eeb5da69-7598-5aa6-7d52-e61a85c9331d.png)

7. If
   %RandomNumber%が50のときVBScriptを実行するようにします。
   ![07](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/69a8f75e-e5e0-8fb4-dc39-2d7c6b4293ed.png)

8. VBScriptの実行
   GetObjectで取得するオブジェクトのファイル名を指定します。
   ![vbsimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6444302f-dcee-2a8b-82f5-2e3f8b5377a2.png)

   
    ```vb:VBScript
    Option Explicit
    '変数宣言
    Dim XlApp
    Dim XlSheet
    Dim XlCells
    
    '取得するオブジェクトにBook2を指定
    Set XlApp = GetObject("Book2").Application
    '1番目のシートを指定
    Set XlSheet = XlApp.Worksheets(1)
    'セルを指定（A列のPAD変数LoopIndex行目）
    Set XlCells = XlSheet.Cells(%LoopIndex%,"A")
    'セルに色付け
    XlCells.Interior.Color = RGB(53, 184, 41)

    '変数クリア
    Set XlCells = Nothing
    Set XlSheet = Nothing
    Set XlApp = Nothing
    ```
        
9. End
   If節のEnd
10. End
   LoopのEnd
11. Excelを閉じる
   ひとつめのExcelインスタンスを終了
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/58439fe5-92ac-4bbf-746e-147b38c1a793.png)

12. Excelを閉じる
   ふたつめのExcelインスタンスを終了
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/831968d5-b457-af46-c559-9d73677fa941.png)


## まとめ

セルの背景に色付けできました。しかしループごとに処理を行うのはいまいちです。そこで[次回](https://qiita.com/sys_zero/items/c3614ee168987cf9a589)は列に条件書式を設定します。
今更VBScriptとは思いますが、Power Automate for desktopの標準アクションではできない部分をカバーする方法のひとつとしてよさそうです。
ただ・・VBScriptリファレンスがなかなか見つからなくて困りました。いつまで使えるのか気になるところです・・・。

## 参考

### Docs

#### VBA

##### GetObject

<https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/getobject-function>

##### ワークシートオブジェクト

<https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet>

### VS Codeの機能拡張

VBScriptを書くときに以下の機能拡張を使いました。

#### Code Runner

VS CodeからVBScriptが実行できます。

<https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner>

#### VBScript Extension for Visual Studio Code

入力補助機能。RGB Colorの指定もできます。

<https://marketplace.visualstudio.com/items?itemName=Serpen.vbsvscode>