Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
AccessへExcelのデータをインポートしたい
投稿日時: 21/03/19 15:36:03
投稿者: MAXBOX

お世話になっております。
 
Excelの任意のセルをAccessへインポートする方法を教えてほしいです。
色々と調べましたが私がしたいことがなかなか見つけられなかったのでこちらで質問致します。
 
社員の文具等を注文するのに、accessから注文書を発行したいと考えています。
 
各部署に商品名や注文数を聞くためのExcelを作り、それに記入してもらいこちらに返してもらっています。
よってExcelファイルは各部署分かれています。
 
そのExcelファイルのサイズ、注文数をaccessにインポートしそのままレポートで作成している注文書に反映させるところまで行いたいです。
 
Excelのファイルの書式がテーブルのように並んでいません。

引用:

     A     B     C     D      F     G
 
 10  社員番号   氏名   部署   商品名   注文数   金額
  
 11        
 
 12
 
 13
  
 14

 
上のようなExcelファイルが部署ごとに分かれています。
 
注文書を発行するテーブルは
 
☆注文書発行テーブル☆
社員番号:数値型
氏名、部署、商品名:テキスト型
注文数、金額:数値型
 
となっています。
それぞれ当てはまるフィールドにExcelのデータをインポートしたいのですがこれは可能でしょうか?
 
どれだけ調べても欲しい情報がなく困っています。
お力を貸して頂けると嬉しいです。

回答
投稿日時: 21/03/19 16:12:25
投稿者: sk

引用:
Excelのファイルの書式がテーブルのように並んでいません。

まずこれが何を意味しているのかについて、
より具体的に明記されることをお奨めします。
 
引用:
上のようなExcelファイルが部署ごとに分かれています。
  
注文書を発行するテーブルは
  
☆注文書発行テーブル☆
社員番号:数値型
氏名、部署、商品名:テキスト型
注文数、金額:数値型

インポート元となる Excel ワークシート上の表の構造と
インポート先となる Access データベース上のテーブルの構造
(フィールド名/データ型)が完全に一致しているのであれば、
DoCmd オブジェクトの TransferSpreadsheet メソッドによって
インポートすることは一応可能であるはず。
 
引用:
そのExcelファイルのサイズ、注文数をaccessにインポートし
そのままレポートで作成している注文書に反映させるところまで行いたいです。

インポート元となる Excel ブックのファイルサイズを
(ワークシート/名前付きセル範囲のデータとは別に)
取得したい、ということでしょうか。

投稿日時: 21/03/19 16:57:53
投稿者: MAXBOX

sk様
ご回答ありがとうございます。
 

引用:
より具体的に明記されることをお奨めします。

省略しすぎました。申し訳ございません。
 
引用:

      A      B     C     D       F      G  
 9   前回注文
  
 10   社員番号   氏名   部署   前商品名   前注文数   前金額 
  
 11                                      
 
 12                                      
                                        
 13                                      
                                        
 14
 
     H       I      J    
 9   今回注文 
  
 10   商品名     注文数    金額
  
 11        
 
 12
  
 13
  
 14
 
 

 
このように表が二つ並んでいて、左には前回注文したものが表示されていて、右側には今回注文するものが表示されています。
accessにインポートするのは今回の注文データだけなのでテーブルのように並んでいないという表現をしてしまいました。
 
 
引用:
DoCmd オブジェクトの TransferSpreadsheet メソッドによって
インポートすることは一応可能であるはず。

 
フィールド名などは一緒です。
上で書いたExcelの構成だと厳しいですかね?
 
引用:
そのExcelファイルのサイズ、注文数をaccessにインポート

 
すみません。
入力ミスです。Excelファイルの今回注文する商品名、注文数、金額をAccessにインポートということです。
申し訳ございませんでした。

回答
投稿日時: 21/03/19 17:30:22
投稿者: sk

引用:
このように表が二つ並んでいて、左には前回注文したものが表示されていて、
右側には今回注文するものが表示されています。
accessにインポートするのは今回の注文データだけなので
テーブルのように並んでいないという表現をしてしまいました。

「前回注文したもの」も一緒に取り込んでしまうことによって
何か不都合が生じ得るのでしょうか。
(何故に前回注文時の情報を残しているのか、という話でもありますが)
 
また、E 列の記載が抜けているようですが、これは実際の
ワークシート上においても「 E 列は空白列である」ということを
示されているのでしょうか。
 
引用:
☆注文書発行テーブル☆
社員番号:数値型
氏名、部署、商品名:テキスト型
注文数、金額:数値型

引用:
Excelファイルの今回注文する商品名、注文数、金額をAccessにインポート

引用:
そのままレポートで作成している注文書に反映させるところまで行いたいです。

レポート上に出力する項目を「今回注文するもの」に限るのであれば、
レポートのレイアウトや、レコードソースとなる選択クエリの方で
「前回注文したもの」を出力対象から外してしまえば済むのではないでしょうか。
 
「元から存在している[注文書発行テーブル]やレポートのデザインを
極力いじりたくない」ということなのであれば、[注文書発行テーブル]とは別に、
そのインポート処理のための(ワークシート上の表と同一構造の)
バッファテーブルを設けるという方法も取れるように思います。

投稿日時: 21/03/23 09:03:49
投稿者: MAXBOX

もう一度やり方を見直してみます。
検討して頂き誠にありがとうございます。