Excelに書かれたブログタイトルを元にブログ記事を自動生成する【ChatGPT】【Power Automate Desktop】

# はじめに
#### この記事内でやること 
1. Excelに書かれたブログタイトルを【Power Automate Desktop】を使って【ChatGPT】に自動入力してブログ記事を生成する
2. 自動生成されたブログ記事をExcelに自動で貼り付ける

実際の画面
https://www.youtube.com/watch?v=UfB0rm-5L1M

#### 事前に用意するもの
・Windows[ Microsoft Power Automate Desktop ]
・Chrome[ ChatGPT ]
・Excelにブログタイトルを入れておく

[Excel]![スクリーンショット_2023-03-09_061032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/80ba69ab-fd63-7bc3-42fb-60ccf8116096.png)
# 【Power Automate Desktop】全体の作業フロー
・事前準備
〜繰り返し〜
・記事の生成
・記事の加工
・Excelに書き込み
〜〜〜〜
・後処理

[Power Automate Desktop]![スクリーンショット 2023-03-08 104844 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/5bda9357-5129-0b36-50df-ad8ba2d31bb1.png)
## 事前準備
ここでは生成する記事数の指定・アプリの起動・変数の設定などを行います。
1. 入力ダイアログを表示  
2. テキストを数値に変換
2. 実行中のExcelに添付
2. 新しいChromeを起動する
2. 変数の設定
2. 変数の設定
2. Excelワークシートの列名を取得する
2. Excelワークシートの列名を取得する
[Power Automate Desktop]![スクリーンショット 2023-03-08 104905 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/6b5f40de-5ef9-ba05-0662-0163e4252dd6.png)

#### 入力ダイアログを表示 / テキストを数値に変換
生成する記事の数を入力します。（入力された数値＝記事生成フローの繰り返しの回数）
入力ダイアログで生成された変数はテキスト型なので数値に変換しておきます。

#### 実行中のExcelに添付
使うExcelブックを読み込みます。
実行中のExcelから読み込むので、フローを実行するさいは事前にExcelを開いておく必要があります。

#### 新しいChromeを起動する
新しくChromeを起動してChatGPTを表示させます。

#### 変数の設定 / Excelワークシートの列名を取得する
ここの処理はなくても問題ありませんが、後々わかりやすくするために行います。
ChatGPTに入力する文言　→　変数：prompt
Excelシートの列に名をつける

[なぜ「◆」を書き加えるの？](#記事の加工)

## 記事の生成
ここではChatGPTにブログタイトルを入力して記事を生成させます。

1. Excelワークシートから列における最初の空の行を取得
1. Webページのリンクをクリック
1. Excelワークシートから読み取る
1. Webページ内のテキストフィールドに入力する
1. Webページのリンクをクリック
1. ウィンドウのUI要素の上にマウスポインターを移動する
1. 画像を待機
[Power Automate Desktop]![スクリーンショット 2023-03-08 104918.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/c2275955-38de-48d5-043c-13c779203406.png)

#### Excelワークシートから列における最初の空の行を取得 / Excelワークシートから読み取る
Excelシートから記事本文が空の行番号を取得して、そのブログタイトルを読み取ります。

#### Webページのリンクをクリック
ChatGPTの「New chat」をクリックします。
ChatGPTは同じチャット内でそれまでの流れを汲んで回答してくれます。それが影響して同じチャット内でブログ記事を連続で生成させると「全く同じ文章構成の記事」を生成してしまうのでここではそれを避けるために記事ごとに新しいチャット欄に切り替えます。

#### Webページ内のテキストフィールドに入力する / Webページのリンクをクリック
Excelから読み取ったブログタイトルを入力して送信します。
この時入力するテキストは「ブログタイトル」＋「変数(prompt1)」なので、変数の内容を変えることで自由にChatGPTに指示を出すことができます。

#### 画像を待機　/ ウィンドウのUI要素の上にマウスポインターを移動する
下の画像が画面内にあるかどうかで文章生成が終わったかどうかを判断しています。
この時マウスポインターが画像に被っていると正しく認識されないので、適当なところに移動させています。
![スクリーンショット 2023-03-09 6.28.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/cda7c5fe-6acb-1d82-a971-8750c85a4d29.png)

## 記事の加工
ここでは生成した記事に操作を加えます。
#### Q.なぜ「◆」を書き加えるの？
A. 後でExcelマクロを使って「◆」を「改行」に置換するのでその目印にするため
ChatGPTからデータを抽出するとき改行が消えてしまうので、Excel側で改行を補う必要があります。そのときの改行させる位置の目印として「◆」をつけています。

1.Webページ内のテキストフィールドに入力する
2.Webページのリンクをクリック
3.ウインドウのUI要素の上にマウスポインターを移動する
4.画像を待機

[Power Automate Desktop]![スクリーンショット 2023-03-08 104930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/0d19fc86-e4dc-36b0-ced0-622d4679d874.png)

### Webページ内のテキストフィールドに入力する
生成した文章の行末に「◆」を書き加えます。

#### Webページ内のテキストフィールドに入力する /~/ 画像を待機
ここは記事を生成すると同じです。

## Excelに書き込み
1. Webページからデータを抽出する
1. ウィンドウにフォーカスする
1. Excelワークシートから列における最初の空の行を取得
1. Excelワークシートに書き込む
1. Excelワークシート内のセルをアクティブ化
1. Excelマクロを実行
[Power Automate]![スクリーンショット 2023-03-08 104944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/dfc18dd5-98f2-9975-576b-e9db16b63408.png)

#### Webページからデータを抽出する
生成した文章をWebページから抽出します。
実際に抽出した変数の中身は画像の通りです。
ここでは加工後のテキストが欲しいので、`DataFromWebPage[3]`を指定して使います。
![スクリーンショット 2023-03-09 082725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/a6593872-945e-ef67-5fd4-b95570f32491.png)
#### ウィンドウにフォーカスする
Excelにフォーカスを当てて表示させます。

#### Excelワークシートから列における最初の空の行を取得 / Excelワークシートに書き込む
Excelシートから記事本文が空の行を取得して、取得した`DataFromWebPage[3]`の値を書き込みます。

#### Excelワークシート内のセルをアクティブ化 / Excelマクロを実行
アクティブセルに対して「◆」を「改行＆改行」に置き換えるマクロを実行させます。
（~~ChatGPTに聞いたらマクロ書いてくれました~~）

```vb
Sub ReplaceSquaresWithNewlines()
    'アクティブセルを取得
    Dim cell As Range
    Set cell = activeCell
    'アクティブセルの内容を文字列として取得し、改行に置換
    Dim text As String
    text = cell.Value
    text = Replace(text, "◆", vbCrLf & vbCrLf)
    '改行に置換した文字列をアクティブセルに設定
    cell.Value = text
End Sub
```
![スクリーンショット 2023-03-09 081740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/198ec3dc-0667-cb17-2428-4dbf47752404.png)

## 後処理
・Excelの保存
・Webブラウザーを閉じる
・メッセージを表示
＜if＞
・Desktopフローを実行
＜Else＞
・メッセージを表示
＜End＞
[Power Automate Desktop]![スクリーンショット 2023-03-08 105000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3014485/6d460898-a234-e8a8-1210-fa304f0bd500.png)


#### Excelの保存 / Webブラウザーを閉じる
Excelブックを保存して、ChatGPTを閉じます。

#### メッセージを表示
続けてブログの投稿を行うかのメッセージを表示させます。
"はい"を押した場合このままブログの自動投稿フローが始まりますが、この記事では解説しません。
"いいえ"を押すと「自動処理が終わりました。」のメッセージウィンドウが出て作業フローが終了します。

# さいごに
AIと自動化の組み合わせを実際に活用してみて、そのパワーに私自身驚いています。
今回はブログ記事の自動化をテーマにしましたが、他にもいろいろな事で応用できそうだなぁっと実感しているところです。

#### 苦労した点
・コピペするときの改行問題
改行の目印を付けたくてもAIが指示通りに文章を生成してくれない

#### 今後したいこと
・生成文章が途切れることがあるので条件分岐を足して対応したい。
・記事のタグも同様に生成したい。