【VBAができるのなら、PDFのエクセル変換はPower Automate Desktopを活用しよう!】
企業向けの仕事をしていると「PDFからの転記」処理に苦しんでいるシーンをよく見ます
もちろん世の中には自動変換ソフトをありますが、無料での打ち手となるとPower Queryしかありません
但し、Power Queryだと複数ページへの対応が難しかったりします
実は、
あまり知られていないですが、無料のPower Automate Desktopであれば複数ページでもエクセルへの変換は自由自在です
この記事ではPower Automate Desktopからエクセルに変換する方法をVBAのテクニックも交えながら解説します
ポイント
今回のポイントは2つあります
1つにはPower Automate Desktopの「PDFからテキストを抽出」アクションを使用するだけでは駄目、ということです
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-644x315.png)
このアクションを使えば、PDFからテキストを抜き出せます
但し、エクセルに書き込むと次のような形になります
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-1.png)
1つのセルに収まってしまい、データとして活用できる形になりません
ですので、もう一つ工夫が必要です
2つ目は、1つ目のポイントの続きでもあるのですが、抽出したデータにルールを適用する必要がある、ということです
これはどういうことかというと、1つのセルに収まらないように工夫したとしても、抽出したデータは1列に収まります
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-2.png)
つまり、PDFが複数ページある場合も1つの列に収まってしまうので、データとして活用するにはルールを見つけて分解する必要があります
この上記ポイント2つを踏まえた上で、本格的な解説に入ります
Power Automate Desktopによるデータ抽出
PDFからテキストを抽出・アクション
まずはこちらのアクションにより、PDFからデータ(テキスト)を抽出します
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/Purple-Neon-Bright-Emoji-Surprise-YouTube-Thumbnail-644x362.png)
データを抽出するPDFファイルを指定した後、抽出するページを指定する欄があります
こちらはデフォルトの設定通り「すべて」を指定しておきましょう
テキストの分割
冒頭に記述したように「PDFからテキストを抽出・アクション」のみだと、データとして活用できません
![画像に alt 属性が指定されていません。ファイル名: image-1.png](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-1.png)
ですので「テキストの分割」アクションにより、データを分割する必要があります
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-3.png)
この時、区切り記号には「新しい行」を指定してください
ここがある意味、今回の記事での最大のポイントかもしれません
そうすれば、以下のように複数行に分割されます
![画像に alt 属性が指定されていません。ファイル名: image-2.png](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-2.png)
VBAによる処理
キーワード
ここからはVBAにて、更にデータを実際に処理する形にできるように変換します
データの変換内容については、PDFの内容と使用目的次第なので詳細は今回の記事では書きませんが、最重要な内容だけ書きます
最重要の内容とは「キーワードの設定」です
例えば、今回の記事で使用しているPDFファイルの内容は複数の請求書です
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-4-644x495.png)
ここから明細行のみを抽出したいとしたら、各PDFページにおける明細行の開始行と終了行が必要です
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-5.png)
よく見ると、上の画像であれば、明細行は数量と小計の間に挟まっていることが分かります
正確には「数量」から始まる行の一つ下からと、「小計」から始まる行の一つ上までが明細行のスペースです
ですので、別シートに以下の画像のような表を作るのがいいです
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-6.png)
こちらの表を上から読み込み、開始行と終了行を繰り返し取得すれば、複数ページ分の明細行が取得できることになります
実際のコードは次のような形になります
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-7.png)
変数:iを使用して繰り返し処理を行うとしたら、条件式に合う行位置をそのまま変数:iで表現します
条件式については、LEFT関数で行の先頭の文字列を抽出して照合します
Split関数
こちらの関数はPDFを扱う時には良く使います
PDFからエクセルに変換すると、どうしても下のような形になるからです
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-8.png)
1行の中にどうしても、複数のテキストが組み込まれてしまいます
ですので、こちらを分割する必要がでてきます
分割についてはSplit関数を使用します
詳細についてはこちらの記事⇒Split関数をご参照ください
VBAとの連携
VBAを作成したら、Power Automate Desktopから実行します
「Excelマクロの実行」アクションを使用し、下の画像のようにマクロ名を指定します
![](https://analytic-vba.com/wp/wp-content/uploads/2024/09/image-9.png)
もし、引数を渡す必要がある場合にはマクロ名の後に;を指定し、その後に引数を指定します
<まとめ>
今回はPDFファイルをエクセルに変換する方法を紹介いたしました
Power Automate DesktopにてPDFファイルの内容をエクセルに落とし、更にPower Automate DesktopからVBAを動かすという流れになります
RPAとVBAが共存するところが、もしかしたら分かりにくかったかもしれません
ただRPAとVBAを共存させる方法は結構、便利ですのでこれを機会に取り組んでみるのもいいかもしれませんね