ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの大量のPDFファイルを順に1つのエクセルシート一列にコピー

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは。以前COUNT IF 関数でお世話になった者です。

現在、100以上のPDFファイルを1つのエクセルファイルへコピーが必要ですが
VBAもマクロも初心者(というか知らない)為、過去の書き込み、検索でもうまい方法に行き当たらず
困っています。

■作業手順
1)PDFファイル内の表を開き、すべて選択、コピー
2)エクセルファイルのA列へペースト(ペーストは一列ですむテキスト)
3)次のPDFファイルを開き、1)2)繰り返し。A列、B列、C列・・と貼り付けていきます。

エクセル以外のファイルを順にコピーしていく方法で、自動化できる方法はあるのでしょうか。
お手数ですがご教授いただきたく、よろしくお願いいたします。<(_ _)>

コメント(12)

> 谷さん

目的を説明しますと、アンケートの個人の回答が1人一枚のPDFファイルに入っていてそれを1つのエクセルに統合したいのです。

アンケートは間接的に外部業者に委託しており一定のレポートは得ているのですが、追加で相関分析や特定の質問に対する回答者の確認などを自前で行いたく。

全回答者のデータをエクセル生データで貰えれば理想なんですがそれが叶わない為、PDFからコピペして生データを自作しようとしております。
エクセルでPDFを開いたりするのは無理だと思うので他の方法を提案してみます。
事前にPDFをTXTやHTMLに変換してからマクロで順に読み込むようにしてみてはいかがでしょうか。
どのようなPDFかはわかりませんが、xdoc2txt等の別のソフトを使い一括してTXT化してからならエクセルでも扱えると思います。
エクセルで扱える形式ならば、開いてコピーして閉じるループを作ればいいだけじゃないかな。
可能ですが・・・

VBAからAcrobatでPDFを読み込んでテキストで保存して、
保存したテキストを読み込んで(必要であればテキストは削除して)
読み込んだテキストを(A1・B1・C1・・・ですか?)に入れ込まなくてはなりません。

要望の通り、全文コピーして・・・も無理ではないのですが、
その方法ですとPCの操作状況などで思い通りな動きはしないかもしれません。

> VBAもマクロも初心者(というか知らない)
ですと、ちょっと敷居が高いかもしれませんね。

"Adobe Acrobat"はお持ちですか?
そういえば何年か前に、なりだいさんの質問に回答をしたことがあるような記憶があります^^
> ばーどさん

ありがとうございます。そのソフト 明日探してみます。フリーだとよいですが。。
> よっちゃんさん

はいそうです。その節はお世話になりましたわーい(嬉しい顔)
それほど進歩してない私です…

acrobatは会社にあるかもなんで明日確認してご報告しますね。
> ばーどさん
とりあえずxdoc2txtはすぐ見つかり、ダウンロードしました。
本日試せず、夜か明日やってみようと思います。

>エクセルで扱える形式ならば、開いてコピーして閉じるループを作ればいいだけじゃないかな。
これがまさにやりたいことです。
というか、今さら思い出したのですがPDFだけでなく同じファイル(リンクとして)HTMLも手元にあります。
そちらの方が話が早いのであれば、PDFにはこだわりません。

>よっちゃんさん
Acrobat、会社にあったのはReaderだけでした・・・・・・・残念・・

なりだいさん

> Acrobat、会社にあったのはReaderだけでした・・・・・・・残念・・

そうでしたか。
Adobe Acrobatがインストールされていれば
目的の動作をするVBAコードを提示したのですが。

フリーソフトでAdobe Acrobatがインストールされていない状態で
PDFファイルをテキストファイルに変換するDLLはあるようですが、
動作に保証はできないのでそちらを使ったサンプルの提示は遠慮させてください。
同様のお悩みで今後このトピックを参考にする(かもしれない)方のために
やはりサンプルコードは提示しておくことにしました。

なりだいさん
Acrobatは30日試用できるみたいです。
試用版で動かせるかは未確認です・・・。

<動作確認した環境>
OS:WinXP Pro SP3
Excel:2003 SP3
Acrobat:7.1.0 Professional
※テキストと罫線のみのPDFファイルでしか動作確認していません。

取り急ぎ動くように書いたので本来使用すべき変数など省略したり
エラートラップしなかったりでいささかお行儀の悪いコードですが参考にはなるかと^^;
使われる方は仕様に合わせてカスタマイズしてください。

このコードが埋め込まれたExcelワークブックが保存してあるのと
同じフォルダ内の全てのPDFを対象としました。

「※1」の部分は、Acrobatのライブラリの仕様の都合で
OSがインストールされていないドライブ(フラッシュメモリ等可)の指定が必須です。

コード
 ↓ 

Option Explicit

Sub PDFファイルをセルに出力するサンプル()
  Const TEMP_DRIVE As String = "D:\" '※1
  Const TEMP_FILE As String = "pdf.txt"
  Dim txtPath As String: txtPath = TEMP_DRIVE & TEMP_FILE
  Dim pdfPath As String: pdfPath = ThisWorkbook.path & "\"
  Dim pdfName As String
  Dim i    As Long

  txtPath = TEMP_DRIVE & TEMP_FILE
  pdfName = Dir(pdfPath & "*.pdf", vbNormal)

  Do While pdfName <> ""
    i = i + 1
    Call PDF_TO_TEXT(pdfPath & pdfName, txtPath)
    Call TEXT_TO_CELL(txtPath, i)
    pdfName = Dir()
  Loop

  Kill txtPath
End Sub

Private Sub PDF_TO_TEXT(ByVal pdfPath As String, ByVal txtPath As String)
  Const SAVE_TYPE As String = "com.adobe.acrobat.accesstext"
  Dim app As Object: Set app = CreateObject("AcroExch.APP")
  Dim doc As Object: Set doc = CreateObject("AcroExch.AVDoc")

  With app
    .Show

    With doc
      Call .Open(pdfPath, "")
      .GetPDDoc.GetJSObject.SaveAs txtPath, SAVE_TYPE
      Call .Close(1)
    End With

    Call .Hide
    Call .Exit
  End With

  Set app = Nothing
  Set doc = Nothing
End Sub

Private Sub TEXT_TO_CELL(ByVal path As String, ByVal lngOffset As Long)
  Dim text As Variant

  text = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(path, 1).ReadAll, vbCrLf)
  Range(Cells(1, lngOffset), Cells(UBound(text) + 1, lngOffset)) = WorksheetFunction.Transpose(text)
End Sub
追伸

トピの流れを読めばわかるかと思いますが、上のコードは
Adobe Acrobatがインストールされていない環境で実行すると
PDF_TO_TEXT()内でエラーになります。

Adobe Acrobatをインストールした後にAdobe Readreをインストールすると
ライブラリが書き換わるのでその場合もエラーになる可能性があります。
> よっちゃんさん

ありがとうございます。今晩試してみます〜〜!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。