VBAを使うと、PDFをXMLファイルに変換することができます。
XMLファイルに変換すると、テキスト情報をタグから取得できるようになり、PDFの情報を取得しやすくなります。
このページでは、以下について紹介していきます。
・XMLファイルを所定のフォルダに保存
・VBAプログラム入りのエクセルをダウンロード可能
それでは以下で詳しく紹介していきます。
目次
- 1 VBAでPDFをXMLに変換して所定フォルダに保存
- 2 VBA入りのエクセルファイルをダウンロード
- 3 VBA作成前の2つの準備
- 4 VBAのプログラムソース解説
- 4.1 プログラム0|変数宣言の指定
- 4.2 プログラムA-1|プログラム開始
- 4.3 プログラムA-2|pathを取得
- 4.4 プログラムA-3|プログラムBを実行
- 4.5 プログラムA-4|プログラム終了
- 4.6 プログラムB-1|2行目から最終行までB列のURLを取得して繰り返し処理
- 4.7 プログラムB-2|Acrobatアプリケーションを起動
- 4.8 プログラムB-3|AcrobatでPDFを開く
- 4.9 プログラムB-4|PDFの情報を取得
- 4.10 プログラムB-5|JavaScriptオブジェクトを作成
- 4.11 プログラムB-6|PDFをxmlファイルに変換
- 4.12 プログラムB-7|PDFファイルを変更無しで閉じる
- 4.13 プログラムB-8|Acrobatアプリケーションを終了
- 4.14 プログラムB-9|オブジェクト解放
- 4.15 プログラムB-10|Funtionプロシージャの戻り値を設定
- 4.16 プログラムB-11|プログラム終了
- 5 Excel VBAについて詳しく理解したいなら
VBAでPDFをXMLに変換して所定フォルダに保存
VBAでPDFをXMLに変換して、フォルダに新しいファイルとして保存する方法をお伝えします。
ここではエクセルと同じフォルダに存在する「.pdf」をxmlファイルに変換します。
手順1. PDFをエクセルと同じフォルダに保存
上記のように、エクセルと同じフォルダにPDFを保管します。
このPDFをxmlに変換します。
手順2. VBAプログラムを実行
VBAを実行すると、同じフォルダにxmlファイルを新しいファイルとして保存します。
このxmlファイルは以下のようなファイルで、さまざまなタグで情報が紐づけられています。
このプログラムの使い所
このページでは、PDFをxmlに変換するプログラムを紹介しています。
実はこれ単体ではそこまで意味があるプログラムではありません。
しかし、このxml変換を活用することでPDFのテキスト情報を取得しやすくなります。
別ページでPDFからテキスト情報を取得するプログラムを紹介します。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへVBA入りのファイルを送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
VBA作成前の2つの準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
準備2. 「Acrobat」の参照設定を変更
上記に関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
準備2. 「Acrobat」の参照設定を変更
Adobe Acrobatを使用するためには、VBAの設定を変更しておく必要があります。
実はVBAのデフォルト設定の場合、Adobe Acrobatは使用できません。
参照設定を変更することで、Adobe Acrobatを使ってPDF操作が可能になります。
参照設定の変更手順は以下のとおりです。
手順2. 「参照設定」を選択
手順3. 「Adobe Acrobat XX.X Type Library」にチェックを入れる
手順4. OKをクリック
手順を以下で説明します。
ここでは「Adobe Acrobat 10.0 Type Library」となっているので、それにチェックを入れています。
お使いのPCで異なる場合がありますが、基本は1つしかないため、それにチェックを入れれば問題なく動くはずです。
上記の設定をしていないと、本事例で紹介しているプログラムは動作しません。必ずチェックを入れるようにします。
それでは、以下でプログラムについて詳細を説明します。
VBAのプログラムソース解説
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
'プログラム0|変数設定の指定 Option Explicit 'プログラムA-1|プログラム開始 Sub ConverPDFtoXML() 'プログラムA-2|pathを取得 Dim path As String path = ThisWorkbook.path & "\副業・兼業のガイドライン.pdf" Debug.Print path 'プログラムA-3|プログラムBを実行 Dim xmlpath As String xmlpath = ConvertXml(path) 'プログラムA-4|プログラム終了 End Sub 'プログラムB-1|プログラム開始 Function ConvertXml(path) 'プログラムB-2|Acrobatアプリケーションを起動 Dim objAcroApp As New Acrobat.AcroApp objAcroApp.Show 'プログラムB-3|AcrobatでPDFを開く Dim objAcroAVDoc As New Acrobat.AcroAVDoc Set objAcroAVDoc = New Acrobat.AcroAVDoc objAcroAVDoc.Open path, "" 'プログラムB-4|PDFの情報を取得 Dim objAcroPDDoc As Acrobat.AcroPDDoc Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() 'プログラムB-5|JavaScriptオブジェクトを作成 Dim js As Object Set js = objAcroPDDoc.GetJSObject 'プログラムB-6|PDFをxmlファイルに変換 Dim savename As String savename = Replace(path, "pdf", "xml") js.SaveAs savename, "com.adobe.acrobat.xml-1-00" 'プログラムB-7|PDFファイルを変更無しで閉じる objAcroAVDoc.Close (1) 'プログラムB-8|Acrobatアプリケーションを終了 objAcroApp.Exit 'プログラムB-9|オブジェクト解放 Set js = Nothing Set objAcroPDDoc = Nothing Set objAcroAVDoc = Nothing Set objAcroApp = Nothing 'プログラムB-10|Funtionプロシージャの戻り値を設定 ConvertXml = savename 'プログラムB-11|プログラム終了 End Function |
それでは、以下でプログラムを詳しく説明していきます。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
また変数については、以下のページで紹介しています。
プログラムA-1|プログラム開始
1 |
Sub ConverPDFtoXML() |
「Sub ConverPDFtoXML()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラムA-2|pathを取得
1 2 |
Dim path As String path = ThisWorkbook.path & "\副業・兼業のガイドライン.pdf" |
エクセルと同じフォルダに保管されている「副業・兼業のガイドライン.pdf」のフルパスをpathとして取得します。
Debug.Printでの検証結果
1 2 3 4 5 6 |
Dim path As String path = ThisWorkbook.path & "\副業・兼業のガイドライン.pdf" Debug.Print path >>>D:\Website_パソコンスキルの教科書\307_VBA_PDF_10\15_PDFをXML変換\VBA\副業・兼業のガイドライン.pdf |
上記のとおりpathでフルパスを取得できていることが分かります。
プログラムA-3|プログラムBを実行
1 2 |
Dim xmlpath As String xmlpath = ConvertXml(path) |
xmlpathを文字列型で変数設定し、プログラムB「Funtion ConvertXml(path)」を実行します。
「Funtion ConvertXml(path)」を実行後に、その戻り値をxmlpathとして取得します。
xmlpathはプログラムBを実行後に、値が格納されます。
プログラムBで説明していますが、このxmlpathはプログラムB-10のとおりsavename(プログラムB-6で設定)の値を返ってきます。
Debug.Printでの検証結果
1 2 3 4 5 6 |
Dim xmlpath As String xmlpath = ConvertXml(path) Debug.Print xmlpath >>>D:\Website_パソコンスキルの教科書\307_VBA_PDF_10\15_PDFをXML変換\VBA\副業・兼業のガイドライン.xml |
これでxmlpathに、PDFをxmlに変換したファイルが設定されていることが分かります。
プログラムA-4|プログラム終了
1 |
End Sub |
これでプログラムAは終了です。
プログラムB-1|2行目から最終行までB列のURLを取得して繰り返し処理
1 2 |
プログラムB-1|プログラム開始 Function ConvertXml(path) |
Functionプロシージャ「ConvertXml」のプログラムの開始を表します。
引数としてpathを受け取ります。
ここではプログラムA-2で設定したpathを受け取っています。
プログラムB-2|Acrobatアプリケーションを起動
1 2 |
Dim objAcroApp As New Acrobat.AcroApp objAcroApp.Show |
objAcroAppをNew Acrobat.AcroApp型の変数として設定します。
「objAcroApp.Show」でAdobe AcrobatをPCウィンドウに起動します。
プログラムB-3|AcrobatでPDFを開く
1 2 3 |
Dim objAcroAVDoc As New Acrobat.AcroAVDoc Set objAcroAVDoc = New Acrobat.AcroAVDoc objAcroAVDoc.Open path, "" |
PDFファイルを操作するobjAcroAVDocを変数設定します。
このobjAcroAVDocを使って、pathで指定したPDFドキュメントを開きます。
なおパスワードを設定したPDFを開く場合、ここでパスワード入力のダイアログが出現しプログラムが停止します。
そのためパスワードが設定されていないことを確認しておく必要があります。
プログラムB-4|PDFの情報を取得
1 2 |
Dim objAcroPDDoc As Acrobat.AcroPDDoc Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() |
xmlに変換するメソッドは、PDDocを使ってしか実行できないため、Acrobat.AcroPDDocというオブジェクトを生成します。
イメージとして、xml変換のために情報を加工していると考えると分かりやすいです。
プログラムB-5|JavaScriptオブジェクトを作成
1 2 |
Dim js As Object Set js = objAcroPDDoc.GetJSObject |
Adobe Acrobatで使用できるJSObjectオブジェクトを設定します。
PDDocに関連付けられたJSObjectオブジェクトをjsとして扱うようにします。
プログラムB-6|PDFをxmlファイルに変換
1 2 3 |
Dim savename as String savename = Replace(path, "pdf", "xml") js.SaveAs savename, "com.adobe.acrobat.xml-1-00" |
savenameを文字列型で設定し、引数として受け取ったpathの拡張子pdfをxmlにReplaceで置換します。
xmlに変換したファイルをsavenameのファイル名で保存します。
xmlファイルに変換
PDFから変換したxmlファイルは上記のようにさまざまなタグで情報を紐づけられています。
これらのタグに紐づけられた情報をうまく活用して、全テキストを取得したり、必要な部分に絞ってテキストを抽出したりします。
実際のテキスト取得に関しては、別ページで紹介します。
画像ファイルを「images」フォルダに保存
これは本論とは関係ありませんが、xmlに変換すると画像ファイルが「images」というフォルダで自動生成されます。
プログラムB-7|PDFファイルを変更無しで閉じる
1 |
objAcroAVDoc.Close (1) |
起動したPDFファイルを閉じます。「(1)」で変更なしで閉じます。
プログラムB-8|Acrobatアプリケーションを終了
1 |
objAcroApp.Exit |
プログラム2で設定したobjAcroAppを閉じて、アプリケーションを終了させます。
プログラムB-9|オブジェクト解放
1 2 3 4 |
Set js = Nothing Set objAcroPDDoc = Nothing Set objAcroAVDoc = Nothing Set objAcroApp = Nothing |
プログラムBで設定した各オブジェクトを解放します。
プログラムB-10|Funtionプロシージャの戻り値を設定
1 |
ConvertXml = savename |
ここで変換したxmlファイルを次の処理に使います。
そこでsavename(xmlファイルのフルパス)をプログラムBの戻り値として設定します。
これによりプログラムAにsavenameの値を返すことができます。
プログラムB-11|プログラム終了
1 |
End Sub |
プログラムB-1と対になるプログラムです。プログラム終了させる記載です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
Excel VBAについて詳しく理解したいなら
上記は、私が実際にVBAを活用して効率化してきた事例を紹介しています。
VBAを活用すると、仕事を効率化できる幅を広げることができます。
Excel VBAで出来ることは動画でも解説
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。