タグ別アーカイブ: 自動化

POWER AUTOMATE DESKTOPでエクセルをうまく活用する方法~

Power Automate Desktopをうまく活用すれば、VBAを覚えるよりも簡単にエクセル操作を自動化することができます

今回はPower Automate Desktop(以降、PAD)でエクセル操作をうまく行う方法を紹介します

ショートカットキーの操作

一般操作

PADのエクセルメニューは実際の操作内容と比べると豊富とは言えません

但し、ショートカットキーをうまく使うことでカバーが可能です

例として列の並び替えを行ってみましょう

下の画像のA列を降順にします

降順にするショートカットキーを確認するため、まずは「Altキー」を押します

すると、キー操作でエクセルを操作できるようになります

そのまま並び替えを行うと「Alt⇒A⇒SD」というショートカットキーであることが分かります

このショートカットキーを「キー送信アクション」に設定します

設定したキー送信前に並び替え範囲上にカーソルを置くことも重要です

これでショートカットキーで並び替えが行われるようになります

SUM関数

SUM関数をPADで操作する場合「=SUM()」とセルに入力する方法があります

実はPADの「キー送信」アクションでも行えます

ショートカットキーでは「Alt⇒Shift⇒=」ですが、PADでは=ではなく「OemMinus」と記述します

変数によるシート名設定

PADでは、操作するシートを選択する際には「アクティブなエクセルワークシートの設定」アクションを使用します

シート名の指定が頻繁に起こるようであれば、フローの最初で変数で指定できるようにしましょう

そうすれば、後でエクセル上でシート名を変更した際にPADの修正が楽になります

繰り返し処理

シート分割/ワークシート関数で余りを計算

下のGIF画像では1シートの内容を指定行数分で区切り、新シートに追加しています

最初はAllシートに18行あります

こちらのAllシートの18行をそれぞれ3行に分けて新規シートを追加することで、結果的に6シート追加されます

仕組みとしては繰り返し処理する行数(行位置)をカウントアップする際に、NO(1,2,3)を別シートに書き込んでいます

そしてMOD関数により3で割った余りを計算しています

つまり、繰り返し処理の際に次のような公式が成り立ちます

余り1(例:1や4)⇒別シートへのコピー開始行

余り3(例:3や7)⇒別シートへのコピー終了行

ですので、次の画像のような条件分岐処理を行えば指定行単位でのシート分割が行えます

上記画像の「intMod」は算出した余りの値です

intModが1の時には、コピー開始行の変数:rowStartに行位置を割り当てます

intModが0の時には、コピー終了行の変数:rowEndに行位置を割り当て、サブフローでシートを追加しコピーを実行します

この処理がそのまま他の業務で使えるとは思いませんが、役に立つと思える点が2つあります

1つはPower Automate DesktopではVBAのようにコード内での計算が行えません

ですので、今回のようにワークシート関数を埋め込んだ別シートで計算するのがとても有効なケースがあるはずです

2点目は、何かと余りを計算するMOD関数は使用機会が多いです

余りを活用すれば、思わぬ形で業務の定型化が行えます

下からの繰り返し処理

繰り返し処理は通常、上の行から行います

実は下から処理を行った方がうまく行くケースも多いです

一番分かりやすいのは、行削除を伴う繰り返し処理を行うケースです

上の画像で列1の値が「a」の場合に行を削除するとします

問題は5行目と6行目です

仮に繰り返し処理を行う際の行位置(行数)を変数:myRowで表現するとします

変数:myRowが5になった際には、行削除が行われます

*2行目が削除されるので、実際には4の時です

ここで、行6にあったaは行5に自動的に繰り上がります

一方、myRowは6になり、行6の処理に移ります

ですので、結果的に6行目(下のGIF画像では最初5行目*)のaが未処理で残ります

*上のGIF画像は2行目が削除された状態から始まっています

上のGIF画像では下のaが削除されてもbとcの下のaが残っているのがよくわかると思います

これが、繰り返し処理を下から行うと問題はなくなります

画像に alt 属性が指定されていません。ファイル名: image-54.png

行位置を表すmyRowが6になった時に行削除行われ、次にmyRowが5になった時にも削除が行われるからです

つまり、行削除を行った時の以降の行の動きと繰り返し処理の方向が一致するからです

実際にフローについて解説します

下から繰り返し処理を行うために「変数を小さくする」アクションをうまく活用します

行位置の初期値は列の最終行にし、繰り返し変数を小さくしていき、変数が2未満になったら終了するようにします

繰り返し処理がうまく行かないケースは、この下からの繰り返し処理もぜひ検討してみてください

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ

POWER AUTOMATE DESKTOP逆引き辞典~ファイル操作~

 Microsoft社の無料RPA・Power Automate Desktopのアクションの中から、ファイルの操作のアクションを紹介します 

逆引き辞典に戻る

ファイルのコピー

指定したフォルダにファイルをコピーします

パラメーターの選択

コピーするファイル

ファイルの指定方法は3つの方法から選択できます

①ファイルをクリック操作で指定する方法

②フォルダをクリック操作で指定した後、ファイル名を手動で入力する方法

③変数で指定する方法

宛先フォルダ

フォルダを手動もしくは、クリック操作で指定します

ファイルが存在する場合

コピー先のフォルダに同名のファイルが既に存在する場合は「上書き」と「何もしない」中から処理を選択できます

サンプル

一部修正が必要です

ファイルの移動

ファイルを指定したフォルダに移動します

パラメーターの選択

移動するファイル

移動するファイルを指定します(詳細はファイルをコピーするを参照してください)

宛先フォルダ

移動先のフォルダを指定します

ファイルが存在する場合

「上書き」するか「何もしない」かを選択します

ファイルの削除

指定したファイルを削除します

パラメーターの選択

削除するファイルを設定します

ファイル名の変更_新ファイル名を手動設定

アクション名:ファイルの名前を変更する

パラメーターの選択

名前を変更するファイル

名前を変更するファイルを設定します

名前の変更の方法

「新しい名前を設定する」を設定します

新しいファイル名

拡張子の指定を含まないファイル名を指定します

拡張子を保持する

オンのままをお勧めします

ファイルが存在する場合

「上書き」するか「何もしない」を選択できます

ファイル名の変更_日時の追加

アクション名:ファイルの名前を変更する

パラメーターの選択

1/2

名前を変更するファイル

名前を変更するファイルを設定します(詳細はファイルをコピーを参照)

名前の変更の方法

「日時を追加する」を設定します

2/2

追加する日時

「現在の日時」を設定します

日時を追加する

日時を追加する位置を既存のファイル名の前にするか後にするかを設定します

区切り記号

既存のファイル名と日時との間をつなぐ記号を設定します

日時型式

デフォルトでは次の設定になっています(年月日)

複数ファイルのファイル名に連番を付ける

アクション名:ファイルの名前を変更する

(例:テスト_1.xlsx ➡ 001_テスト_1.xlsx)

 この処理を行う場合には、事前にフォルダ関連のアクションにて複数のファイル名を取得して変数に格納しておく必要があります(フォルダアクション内でファイルの作成日時等でソートして置く必要があります)

パラメーターの選択

上の画像のように、事前にファイル名を取得して変数に格納/保存しておく必要があります

1/3

名前を変更するファイル

ファイル名を格納した変数を設定します

追加する番号

既存のファイル名を活かす場合にはオンにしておきます(オフにした場合は連番以外に付けるファイル名を指定します)

名前の変更の方法

連番にするを設定します

追加する番号

連番を既存のファイル名の前に付けるか、後に付けるかを設定します

2/3

開始番号

ファイル名につける開始番号を設定します

増分

各ファイルに付ける連番の増分を設定します

区切り記号

既存のファイル名と連番との間に付ける記号を設定します

3/3

パティングを使用します

オンにすると連番を指定桁まで0を詰めます

各番号の最小長

0を詰める場合の桁数を設定します

ファイルが存在する場合

ファイルが存在している場合には「上書き」するか「何もしない」を設定できます

サンプル

フォルダやファイル名等の設定を変更する必要があります

ファイルを待機します

詳細はこちらを参照願います

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ソルバーによるシミュレーション6~マクロ編・操作~

 今回は、前の回にて作成した2つのマクロを書き換えて、本格的にソルバーを動かすマクロを作成します

前回作成した2つのマクロは、作成条件が次の3つの項目で違っていました

➀目的セル、変数セル、及び制約方法を指定するセルの行位置

目標値の設定の仕方;シナリオ1/「最大値」、シナリオ2/「指定値」

制約方法の指定:シナリオ1/「<=」、シナリオ2「>=」

記録したマクロのコードを比較して、上記の違いがどう反映されているかを見てみましょう!

シナリオ1
シナリオ2

上がシナリオ1で下がシナリオ2です

おおよそ、黄色の目印を付けたうち、どこが「変数」で置き換えられるか見当がついたと思います

変数で置き換えられる箇所をまとめると、次の通りになります

・SolverOK➡SetCell:「目的値のセル」

      ➡MaxMinVal:1は最大値、2は最小値、3は指定値

      ➡ValueOf:指定値がある場合に指定(無い場合は0)

・ByChange➡「変動する値:値範囲」

・ SolverAdd➡CellRef: 「制約条件の範囲」

      ➡Relation:制約方法の指定

       *下の図の順番で指定:etc 「<=」は1、「=」は2)

      ➡FormulaText:制約条件の指定           

今回は前回作成したシナリオ1マクロを以下の3つ、

1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)

それぞれを変数で置き換えてマクロを動かせるようにしましょう!

1.範囲を指定できるようにしておく

今回はC2セルで1を選んだら上の行を操作する(前回のシナリオ1)、2を選んだら下の行(前回のシナリオ2)を操作するようにします

次の2.ではシナリオ1の前に、IF構文を配置し、C2セルに応じて前述の1~3の範囲を動かせるようにします

If mySheet.Range(“C2”).Value = “1” Then ~ else ~

2.マクロに変数をセットしてマクロを実際に動かす

➀If構文で変数を可変にする

②ソルバーのコードに変数を設定する

各X1、X2を1に直しながら、マクロを試してみてください

<まとめ>

 今回は、前回操作した記録マクロの範囲(以下の3つの範囲)を事前に指定できるようにしました

1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)

 次回はいよいよ、ループ処理により、複数のシミュレーションを一気に走らせることができるようにします!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村