
Robo1号
2号さん!Excelから読み取るのはできるようになったけど、今度は「書き込み」がしたいんです!結果をExcelに残せないと上司に報告できません…

Robo2号
読めたら次は書く、自然な流れですね。今回は、「Excelワークシートに書き込む」のアクションを説明していきます。Excelを使った自動化では、ほぼ必ず登場するアクションです。
アクションの位置
左側のアクション一覧から 「Excel」→「Excelワークシートに書き込む」 を選びます。
アクション名をダブルクリックするか、フローデザイナーへドラッグ&ドロップで追加できます。

アクション設定画面

| 項目 | 内容 |
|---|---|
| Excelインスタンス | 書き込み先のExcel。「Excelの起動」や「実行中のExcelに添付」で作った変数(%ExcelInstance%)を指定します |
| 書き込む値 | 書き込みたい文字・数値・変数。データテーブルを渡すと表ごとまとめて書き込めます |
| 書き込みモード | 「指定したセル」か「現在のアクティブなセル」を選びます |
| 列 | 列番号(1,2,3…)または列名(A,B,C…)。指定したセルのときに使います |
| 行 | 行番号。指定したセルのときに使います |

Robo2号
列は「1」でも「A」でもOKです。ループで列を動かしたいときは数字、決め打ちのときはアルファベットにすると読みやすいですよ。
使い方①:指定したセルに書き込む
A1セルに「Robo1号参上」と書き込んでみます。
- 書き込む値:Robo1号参上
- 書き込みモード:指定したセル
- 列:A 行:1

使い方②:データテーブルをまとめて書き込む
「Excelワークシートから読み取る」で取得したデータテーブル(%ExcelData%)を、そのまま別のExcelのA1に渡すと、表全体を一度に貼り付けできます。
1セルずつループで書くより圧倒的に速いので、データ量が多いときはこちらがおすすめです。

Robo1号
えっ、ループいらないんですか!?いままで1000行ぐるぐる回してました…

Robo2号
どうりでRobo1号のCPUが熱くなるわけです。1行ずつ書くと、その都度Excelとやりとりが発生しますからね。
コピペ用フロー
下のテキストをコピーして、PADのフローデザイナーに貼り付ければ再現できます。新しいExcelを開き、A1に文字、B1に今日の日付を書き込んで終わります。
動作確認はVer2.73です。
Excel.LaunchExcel.LaunchUnderExistingProcess Visible: True Instance=> ExcelInstance
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: $'''Robo1号参上''' Column: $'''A''' Row: 1
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateOnly CurrentDateTime=> CurrentDateTime
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: CurrentDateTime Column: $'''B''' Row: 1
うまく動かないときは
- 「Excelインスタンスが無効」と出る:書き込みの前に「Excelの起動」か「実行中のExcelに添付」が入っているか確認しましょう。
- 違うシートに書き込まれる:書き込み前に「アクティブなExcelワークシートの設定」でシートを指定します。
- 日付が数字(45000など)になる:Excel側のセルの書式が「標準」になっています。セルの書式を日付に変えるか、「日時をテキストに変換」で文字にしてから書き込みましょう。
Robo1号の感想

Robo1号
読んで、書いて、保存する。これでExcel三兄弟がそろいました!データテーブルで一気に書けるのは目からウロコ…いや、目からネジです!
