前回までの記事では、Excelのいくつかの転記方法について学習しました。
この記事では規定のフォーマットに行の挿入をしながら転記を行う方法について学習します。
「Excelワークシートに行を挿入」アクション
Excelに行を挿入するには「Excelワークシートに行を挿入」アクションを使います。このアクションを1回実行すると指定した行に1行挿入します。4行挿入するには、(ループなどを使って)このアクションを4回実行する必要があります。
「Excelワークシートに行を挿入」アクション(Microsoft リファレンス)
フローが動いている動画はこちら
(STEP1)Excelを読み込む処理の作成
2つのExcelファイルがあります。
- テスト請求書.xlsx
- 請求データ. xlsx
テスト請求書が請求書のフォーマットです。請求データがフォーマットに書き込むべきデータです。データをフォーマットに転記します。
しかし、請求データが6件あるのに対してフォーマットに入力欄が4行しかありません。行の挿入アクションを使って必要な行を追加してから転記します。
データ件数の変動に対応できるようにデータ件数から必要な行数を読み取って、必要な数だけ行挿入できるようにします。
▲「Excel」グループの中の「Excelの起動」アクションのパラメータを入力します。
- Excelの起動:「次のドキュメントを開く」を選択します。
- ドキュメントパス:Excelのファイルパスを入力します。C:\Users\user\Desktop\電話番号.xlsx
- インスタンスを表示する:Excelを開くときにバックグラウンドで表示しないようするか、表示するかを選択します。チェックをオフにするとExcelが画面上に表示されません。
- 読み取り専用として開く:書き込みを行わない場合は、読み取り専用のチェックをオンにします。図ではオフになっていますが多くの場合安全のために読み取り専用でよいかなと思います。
▲今回は一つのフローで複数のExcelを扱うため管理上わかりやすいようにデフォルトのExcelDataという名前からExcelSeikyuDataという名前に変更しています。
▲アクショングループの中の「Excel」の中の「アクティブなExcelワークシートの設定」アクションを追加します。
- Excelインスタンス:起動したExcelインスタンスを指定します。今回は「Excelの起動」アクションによってExcelを開きましたので「Excelの起動」アクションのフロー変数である「%ExcelInstance%」を指定します。
- 次とともにワークシートをアクティブ化:ワークシートをどのように指定するかを「名前」か「インデックス」のいずれかから選択します。今回は「シートの名前がわからずExcelの中の一番左側のシートを選択する」という想定のもと「インデックス」を選択します。
- ワークシートインデックス:シートのインデックス番号を指定します。インデックス番号の数え方はブックのシートは左から数えます。今回は一番左端のシートを指定したいので「1」と入力します。
▲「Excel」グループの中の「詳細」の中の「Excelワークシートから列における最初の空の行を取得」アクションを追加してパラメータを入力します。
- Excelインスタンス:%ExcelSeikyuData%
- 列:1
▲「Excel」グループの中の「Excelワークシートから最初の空の列や行を取得」アクションを追加します。
- Excelインスタンス:%ExcelSeikyuData%
▲「Excel」グループの中の「Excelワークシートから読み取り」アクションを追加します。
- Excelインスタンス:%ExcelSeikyuData%
- 取得:セル範囲の値
- 先頭列:1
- 先頭行:1
- 最終列:%FirstFreeColumn – 1%
- 最終行:%FirstFreeRowOnColumn – 1%
▲「Excel」グループの中の「Excelを閉じる」アクションを追加します。
- Excelインスタンス:%ExcelInstance%
- Excelを閉じる前:ドキュメントを保存しない
請求データを読み込む処理が完成しました。合計6個のアクションを使いました。次は請求書のフォーマットファイルを開いて行の挿入の処理と書き込みの処理を作成していきます。
ここで一度テストします。フローを実行してExcelファイルが読み込めるか確認しましょう。ExcelData変数の中身も確認してください。
(STEP2)Excelに行の挿入する処理をつくる。
読み込む処理の最後のアクションの後ろにさらにアクションを追加していきます。フローの7行目から作ります。
このアクションはExcelのウィンドウに「Windowsキー+↑キー」のショートカットを送信してExcel画面を最大化表示しています。フローを作成するうえで動作が確認しやすいので入れています。無くても良いアクションなのでお好みでどうぞ。Excelインスタンスを非表示で実行する場合は削除してください。
- 設定:%NumberOfRowsToAdd%
- 宛先:%ExcelData.RowsCount – 4%
この変数は挿入すべき行数をカウントするための変数です。
%ExcelData.RowsCount%は書き込むべき請求データの行数です。そのデータの行数から4を引いてますね。
この4は何かというと請求書のフォーマットに予め用意されている入力スペースの行数です。
請求書フォーマットには4行分の入力スペースは既に確保されていますので、もし請求データが4行以下の場合、行の挿入をする必要がありません。ですので4を引いて何行分の「行の挿入」をすればよいかの判断材料にしています。
例えばデータ行数が10の場合、10-4で6となりますので行の挿入アクションを6回実施する必要があります。もしデータ行数が4以下の場合、条件分岐を使って行の挿入を行わないようにしたいと思います。
- 最初のオペランド:%NumberOfRowsToAdd%
- 演算子:以上である(>=)
- 2番目のオペランド:1
1つ前のステップで解説したように、%NumberOfRowsToAdd%変数には「挿入すべき行数」が格納されます。この変数で行の挿入をするのかしないのかをifアクションで処理を分岐させたいと思います。
- ifの条件分にマッチする場合:ifの中のアクションを行います。
- ifの条件分にマッチしない場合:ifの中のアクションは行わず次のアクションにスキップします。
▲「ループ」グループの中の「Loop」アクションを追加してパラメータを入力します。このアクションはifの中に追加してください。%NumberOfRowsToAdd%の中の数だけ行の挿入を行うためにループします。
- 開始値:1
- 修了:%NumberOfRowsToAdd%
- 増分:1
▲「Excel」グループの中の「Excelワークシートに行を挿入」アクションを追加します。パラメータを入力します。
- Excelインスタンス:%ExcelSeikyusyo%
- 行インデックス:14
▲14行目に必要な数だけ行挿入を行います。見出しの直下(11行目)には行挿入しない方がいいです。行挿入は一つ上の書式をマネするので、見出しの書式(Boldとかフォントサイズとか)と同じになっちゃいます。
行が挿入されているか確認します。
(STEP3)Excelワークシートに書き込む処理をつくる。
▲「変数」グループの中の「変数の設定」アクションを追加します。
- 設定:%CurrentWriteRow%
- 宛先:11
- 反復処理を行う値:%ExcelData%
- 保存先:CurrentItem
- Excelインスタンス:%%
- 書き込む値:%CurrentItem[‘品目’]%
- 書き込みモード:指定したセル上
- 列:2
- 行:%CurrentWriteRow%
品目の列に入力するためのアクションです。
- Excelインスタンス:%%
- 書き込む値:%CurrentItem[‘合計’]%
- 書き込みモード:指定したセル上
- 列:2
- 行:%CurrentWriteRow%
合計列に記入するためのアクションです。
▲「変数」グループの中の「変数を大きくする」アクションを追加します。
- 変数名:%CurrentWriteRow%
- 大きくする数値:1
Robinソースコード
Excel.LaunchExcel.LaunchAndOpen Path: $'''C:\\Users\\user\\Desktop\\請求データ.xlsx''' Visible: True ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelSeikyuData Excel.SetActiveWorksheet.ActivateWorksheetByName Instance: ExcelSeikyuData Name: $'''請求データ''' Excel.GetFirstFreeRowOnColumn Instance: ExcelSeikyuData Column: 1 FirstFreeRowOnColumn=> FirstFreeRowOnColumn Excel.GetFirstFreeColumnRow Instance: ExcelSeikyuData FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow Excel.ReadFromExcel.ReadCells Instance: ExcelSeikyuData StartColumn: 1 StartRow: 1 EndColumn: FirstFreeColumn - 1 EndRow: FirstFreeRowOnColumn - 1 ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData Excel.CloseExcel.Close Instance: ExcelSeikyuData Excel.LaunchExcel.LaunchAndOpen Path: $'''C:\\Users\\user\\Desktop\\請求書テスト.xlsx''' Visible: True ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelSeikyusyo MouseAndKeyboard.SendKeys.FocusAndSendKeys TextToSend: $'''{LWin}{Up}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: False SET NumberOfRowsToAdd TO ExcelData.RowsCount - 4 IF NumberOfRowsToAdd >= 1 THEN LOOP LoopIndex FROM 1 TO NumberOfRowsToAdd STEP 1 Excel.InsertRow Instance: ExcelSeikyusyo Index: 14 END END SET CurrentWriteRow TO 11 LOOP FOREACH CurrentItem IN ExcelData Excel.WriteToExcel.WriteCell Instance: ExcelSeikyusyo Value: CurrentItem['品目'] Column: 2 Row: CurrentWriteRow Excel.WriteToExcel.WriteCell Instance: ExcelSeikyusyo Value: CurrentItem['合計'] Column: 3 Row: CurrentWriteRow Variables.IncreaseVariable Value: CurrentWriteRow IncrementValue: 1 IncreasedValue=> CurrentWriteRow END Excel.CloseExcel.CloseAndSaveAs Instance: ExcelSeikyusyo DocumentFormat: Excel.ExcelFormat.OpenXmlWorkbook DocumentPath: $'''C:\\Users\\user\\Desktop\\請求書\\請求書'''
Power Automate for desktopのフローデザイナーに張り付けることで今回作成フローをご自分のPCで再現することができます。
Excelを今日の日付の名前を付けて保存するには?
下記の記事を参考にしてください。
印刷レイアウト調整のコツ
行の挿入によるページ設定・印刷レイアウト崩れが考えられますので、それを抑えるためのExcelフォーマットでの事前設定について次の記事でまとめたいと思っています。
>記事準備中
まとめ
この記事ではExcelに行を挿入しながら書き込む方法について学習しました。
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。