Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Access 2016)
Excelファイルを見出し行以外取り込む
投稿日時: 19/11/21 20:44:11
投稿者: マヨイ

ExcelファイルをAccessのテーブルに取り込む際見出し行以外を取り込みたいです。
なぜそのような事をするかはExcelの見出し行が同じ項目が複数あったり、改行がされていてインポートするとフィールド○○のように変換されてしまうためです。
例を挙げますと
工事番号 工事名   工事 内容   工事番号 備考   
1-1-1 道路工事  道路の掘削    111 安全に作業
2-2-2 道路工事  道路の掘削     222 安全に作業
※見づらい場合はすみません。工事と内容の空白が改行のイメージです。
のような形です。
初めにAccessに見出し行だけのテーブルを作っておきそこにデータだけ取り込みたいです。
 
 
DoCmd.TransferSpreadsheet acImport, , "工事管理テーブル", "K:\Access_Excel VBA Tips\工事データ.xlsx", falce,"“Sheets1!A2:F”
※ディレクトリーは例です。
のようにした場合フィールドF1がないとエラーが出てしまいました。
またExcelの見出し行を削除して取り込んでも同様でした。
もし何か良い方法が有ればご教授下さい。
よろしくお願いいたします。

回答
投稿日時: 19/11/22 09:43:19
投稿者: sk

引用:
ExcelファイルをAccessのテーブルに取り込む際見出し行以外を取り込みたいです。
なぜそのような事をするかはExcelの見出し行が同じ項目が複数あったり、
改行がされていて
インポートするとフィールド○○のように変換されてしまうためです。

・Access の 1 つのテーブルにおいて、同じ名前のフィールドを
 2 つ以上定義することは出来ない。
 
引用:
例を挙げますと
工事番号 工事名   工事 内容   工事番号 備考   
1-1-1 道路工事  道路の掘削    111 安全に作業
2-2-2 道路工事  道路の掘削     222 安全に作業
※見づらい場合はすみません。工事と内容の空白が改行のイメージです。

・Access の 1 つのテーブルにおいて、フィールドの名前に
 改行文字を使用することは出来ない。
 (他にも使用出来ない特殊記号があるが、それはまた別の話)
 
いずれも Access の仕様に反していますので、
Excel ブックの方でワークシートの列見出しを
何とかされた方が無難でしょう。
 
引用:
DoCmd.TransferSpreadsheet acImport, , "工事管理テーブル", "K:\Access_Excel VBA Tips\工事データ.xlsx", falce,"“Sheets1!A2:F”

・正しくは falce ではなく False。
 
引用:
※ディレクトリーは例です。
のようにした場合フィールドF1がないとエラーが出てしまいました

・Excel ワークシート(セル範囲)の先頭の行を列見出しと見なして
 既存のテーブルへのインポートを行なう場合、
 インポート元となる Excel ワークシート(セル範囲)と
 インポート先となる Access のテーブルとの間において、
 各列/フィールドの名前は正確に一致していなければならない。
 
・Excel ワークシート(セル範囲)の先頭の行をデータ行と見なして
 既存のテーブルへのインポートを行なう場合、
 インポート先となる Access のテーブルにおいて、
 インポート元となる Excel ワークシート(セル範囲)の
 列と同じ数だけフィールドを定義し、かつそれらのフィールドには
 [F1], [F2], [F3] ... のように「"F" と列番号を組み合わせた名前」が
 つけられていなければならない。
 
Office サポート より:
https://support.office.com/ja-jp/article/excel-%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AE%E8%A8%AD%E5%AE%9A-a1952878-7c58-47b1-893d-e084913cc958
 
引用:
またExcelの見出し行を削除して取り込んでも同様でした。

列見出し行を削除した状態のワークシートを
CSV などの テキストファイルとして保存し、
TransferSpreadsheet メソッドではなく
TransferText メソッドによって
テキストファイルをインポートする、
という代替策が挙げられます。

投稿日時: 19/11/27 17:50:05
投稿者: マヨイ

返事が遅くなってしまう申し訳ありません。
詳しくありがとうございます。
現在別のプロジェクトを優先的に進めるように言われてしまい、そちらが片付き次第
sk様の助言の通りにやってみたいと思います。
恐らくエクセルで見出し行を変える、TransferText メソッドを使用すればよいかと思われます。
もしうまくいかない場合は再度助言をいただければと思います。
ありがとうございました。

トピックに返信