トップ回答者
数百枚のword の内容をaccessに登録する方法

質問
回答
-
AccessのVBAで以下のような手順で
(一つ一つの処理は検索すれば簡単にやり方がわかることなので自称初心者でもできるはず)
- VBAでExcelを起動する
- VBAでExcelに空のワークシート(以下SheetA)とAccessに取り込みたい列名が1行目にヘッダとして定義されているシート(以下SheetB)を用意する
- VBAでWordを起動する
- VBAで読み取りたいWordファイルを開く
- VBAでWordの文章全体を選択
(数百枚というのが1ファイルに数百ページという意味なら1ページ毎に選択でも可) - VBAでWordの選択範囲をクリップボードにコピー
- VBAでExcelのSheetAにペースト
(レイアウトがきちんと統一されているなら取り込みたい部分は一定のセルに貼りつけられる) - 取り込みたいセルに不要な文字が混ざっていたらVBAで置換などで除去する
- VBAで取り込みたいセルからSheetBの対応する列の2行目以降に内容をコピーする
- VBAでSheetAを空白にするかSheetAを削除して新規シートを作成する。
- VBAでWordファイルを閉じる。
- 他のWordファイルがあるのなら4から繰り返し
- 全データがそろったらVBAでSheetBのヘッダを含むデータ部分を選択してクリップボードにコピー
- AccessVBAでDoCmd.RunCommand acCmdViewTablesとDoCmd.RunCommand acCmdPasteでクリップボードの内容からテーブルとして取り込む。
- VBAでExcelとWordを終了する
- おわり
#質問しっぱなしで放置は良くない
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:05
-
CreateObject("Word.Application") でWordを開いてオートメーションで操作するのが順当でしょう。
下記は、ワードファイルの最初の表のデータ(3列)をAccessのテーブルに取り込む場合のコード例です。
Sub ImportWordDoc(docFilePath As String) Dim rs As DAO.Recordset Dim myWord As Object 'Word.Application Dim myWordDoc As Object 'Word.Document Set rs = CurrentDB.OpenRecorset("テーブル1") Set myWord = CreateObject("Word.Application") Set myWordDoc = myWord.Documents.Open(docFilePath) With myWordDoc.Tables(1) For R = 2 To .Rows.Count rs.Addnew rs(0) = .Cell(R, 1).Range.Text rs(1) = .Cell(R, 2).Range.Text rs(2) = .Cell(R, 3).Range.Text rs.Update Next End With myWordDoc.Close: Set myWordDoc = Nothing myWord.Quit: Set myWord = Nothing rs.Close: Set rs = Nothing End Sub
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:11
-
詳細が書かれていないので何とも言えないのですが、例えば数百枚の報告書を取り込んだ後も、日常業務として数枚の報告書を取り込む作業が発生する。というのであれば、例えば以下の運用も考えられます。
1.スキャナで取りこむ。
数枚セットすれば、自動的に一気に取込み、それぞれをPDF化、および指定された位置の文字をOCRにより読み取る。この文字を指定するエリアは複数指定可能。2.作成されたPDFおよびOCRにより読み取った複数の文字列を同時に表示するアプリを作成し、取り込む際に人間が確認し、誤りがあれば文字列を修正して取り込む。手書きではないのでほぼ読み取れるはず。特に英数字のみであればさらに正確に読み取る率が上がるはず。また、エラーチェックが可能なところはエラーチェックを付けると、読取り間違いが見過ごされる可能性も下がる。
このPDFはSQL Server であれば簡単に取り込むことができるが、Accessなので、PDFは普通のフォルダに保存し、その索引情報のみをAccessで管理すると良い。#上記の運用が今回のケースに成り立つかどうかはわかりません。上記の機能を持ったスキャナは5万円以下で買えると思います。
実際に私は上記の仕組みでシステムを構築した経験があります。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:05
すべての返信
-
AccessのVBAで以下のような手順で
(一つ一つの処理は検索すれば簡単にやり方がわかることなので自称初心者でもできるはず)
- VBAでExcelを起動する
- VBAでExcelに空のワークシート(以下SheetA)とAccessに取り込みたい列名が1行目にヘッダとして定義されているシート(以下SheetB)を用意する
- VBAでWordを起動する
- VBAで読み取りたいWordファイルを開く
- VBAでWordの文章全体を選択
(数百枚というのが1ファイルに数百ページという意味なら1ページ毎に選択でも可) - VBAでWordの選択範囲をクリップボードにコピー
- VBAでExcelのSheetAにペースト
(レイアウトがきちんと統一されているなら取り込みたい部分は一定のセルに貼りつけられる) - 取り込みたいセルに不要な文字が混ざっていたらVBAで置換などで除去する
- VBAで取り込みたいセルからSheetBの対応する列の2行目以降に内容をコピーする
- VBAでSheetAを空白にするかSheetAを削除して新規シートを作成する。
- VBAでWordファイルを閉じる。
- 他のWordファイルがあるのなら4から繰り返し
- 全データがそろったらVBAでSheetBのヘッダを含むデータ部分を選択してクリップボードにコピー
- AccessVBAでDoCmd.RunCommand acCmdViewTablesとDoCmd.RunCommand acCmdPasteでクリップボードの内容からテーブルとして取り込む。
- VBAでExcelとWordを終了する
- おわり
#質問しっぱなしで放置は良くない
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:05
-
CreateObject("Word.Application") でWordを開いてオートメーションで操作するのが順当でしょう。
下記は、ワードファイルの最初の表のデータ(3列)をAccessのテーブルに取り込む場合のコード例です。
Sub ImportWordDoc(docFilePath As String) Dim rs As DAO.Recordset Dim myWord As Object 'Word.Application Dim myWordDoc As Object 'Word.Document Set rs = CurrentDB.OpenRecorset("テーブル1") Set myWord = CreateObject("Word.Application") Set myWordDoc = myWord.Documents.Open(docFilePath) With myWordDoc.Tables(1) For R = 2 To .Rows.Count rs.Addnew rs(0) = .Cell(R, 1).Range.Text rs(1) = .Cell(R, 2).Range.Text rs(2) = .Cell(R, 3).Range.Text rs.Update Next End With myWordDoc.Close: Set myWordDoc = Nothing myWord.Quit: Set myWord = Nothing rs.Close: Set rs = Nothing End Sub
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:11
-
詳細が書かれていないので何とも言えないのですが、例えば数百枚の報告書を取り込んだ後も、日常業務として数枚の報告書を取り込む作業が発生する。というのであれば、例えば以下の運用も考えられます。
1.スキャナで取りこむ。
数枚セットすれば、自動的に一気に取込み、それぞれをPDF化、および指定された位置の文字をOCRにより読み取る。この文字を指定するエリアは複数指定可能。2.作成されたPDFおよびOCRにより読み取った複数の文字列を同時に表示するアプリを作成し、取り込む際に人間が確認し、誤りがあれば文字列を修正して取り込む。手書きではないのでほぼ読み取れるはず。特に英数字のみであればさらに正確に読み取る率が上がるはず。また、エラーチェックが可能なところはエラーチェックを付けると、読取り間違いが見過ごされる可能性も下がる。
このPDFはSQL Server であれば簡単に取り込むことができるが、Accessなので、PDFは普通のフォルダに保存し、その索引情報のみをAccessで管理すると良い。#上記の運用が今回のケースに成り立つかどうかはわかりません。上記の機能を持ったスキャナは5万円以下で買えると思います。
実際に私は上記の仕組みでシステムを構築した経験があります。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年7月25日 1:05