• 締切済み

エクセルからアクセスへデータ転送

はじめまして。アクセス初心者です。 エクセルからアクセスへデータ転送したいのですが、エクセル側のデータを更新するのは、私では無く、ネットワークで繋がった会社の別の人が更新します。ですので、エクセル側のデータが更新されると、エクセルでマクロを実行し、アクセスのテーブルへデータが転送される様にしたいです。 又、データを転送する場合に、アクセスのあるテーブルのデータを全て消去して転送するパターンと、テーブルのデータの最後に追加してデータを転送させたい場合と2種類あります。 だれか教えて下さい。よろしくお願いします。

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

えーとどこから説明しましょうか。 SQL で調べてもらえば分かると思いますが、SQLとはデータベース問い合わせ言語です。 select * From 商品マスタ- は商品マスターのすべての項目という意味です Where 以降は抽出条件になります。 で結局商品マスターの商品コードがShohinCDと同じものを抽出しますという意味になります。 例えばRange("B1")に商品コードが入っていれば(数値型) select * from 商品マスター where 商品コード=" & Range("B1").value & ";" という文になります。 このDBに対する命令をAccess(Jet)に送るわけです。 商品TBL.Open DBsqlstr, DB接続, , adLockOptimistic でその結果が商品TBLに入ります。 商品TBLに対する更新は 商品TBL.Field("商品単価")=range("C1").value で商品単価という項目名(列名)にC1の値が入ります。 すべての項目に値をセットしたら 商品TBL.Update でDBに書込みされます。 新規のレコードを追加するときは値のセットの前に 商品TBL.Addnew とします。 最後にrecordset と connectionをCloseします。 以上が更新の手順です。 難しいでしょうか?

doradora64
質問者

補足

本当に何回もすいませんが、 生産数という名前のアクセスの、品番というテーブルの、品番というフィールドに,エクセル側のA列を、数量というフィールドに B列を送りたい場合にはどうしたらいいですか?エクセルのファイル名は生産です。申し訳ありませんが、よろしくお願いします。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

どこかで同じ質問に答えたことがあるような気がしますが。 ExcelからAccessにデータを送るにはADOを使います。 マクロになりますが DB接続str=Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\○○\×××.accdb’ Set DB接続 = New ADODB.Connection Set 商品TBL = New ADODB.Recordset DB接続.Open (DB接続str) DBsqlstr = "select * from 商品マスター where 商品コード=" & ShohinCD & ";" 商品TBL.Open DBsqlstr, DB接続, , adLockOptimistic 商品TBLというレコードセットに対して追加、修正を行って更新することができます。

doradora64
質問者

補足

初心者ができる物ではなさそうですね。 これは、エクセルのVBAでこの様に書けばいいのですか? 商品TBLの部分はデータを受けたいテーブル名を書けばいいですか? 商品マスターは、アクセスのファイルの名前で、商品コードは何を指していますか? 質問ばかりですいません。よろしくお願いします。

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.3

すみません。 当方2007所有しておらず、解説ができませんm(_ _)m 下記リンクを参照ください。。。 http://office.microsoft.com/ja-jp/access/HA012242511041.aspx

doradora64
質問者

お礼

ありがとうございました。 がんばってみます。

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.2

こんばんは。 エクセルがアクセスのテーブルのような記述の場合(セル連結や 行に表題など記載されていない)ですが、インポート処理より そのエクセルシート自体をアクセスのリンクテーブルとして 設定したほうが便利ではないでしょうか?(開いた時点で最新データ) やり方は各テーブルが表示されている所を右クリック。 サブウィンドウのテーブルのリンクをクリック。 ファイルの種類をエクセルにし、ネットワークの該当ファイルを 見つけてダブルクリック。 どのシートか選択し次へ。あとは指示に従って進めて下さい。 出来あがると→マークのついたリンクファイルが出来あがりです。 あとは通常のアクセスのテーブルと更新クエリや選択クエリ等 普通に使えます。 使わなくなったら右クリックで削除しても、リンクが切れるだけで 基データファイル(エクセルファイル)は消えません。 お試しを。。

doradora64
質問者

補足

アクセス2007を使用していますが、テーブルが表示されている所で右クリックをしてもテーブルのリンクが有りません。間違っていたらごめんなさい。 開く、デザインビュー、インポート、エクスポート・・・とあります。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「エクセルから」「アクセスへ送る」よりも 「アクセスが」「エクセルに取りに行く」の方が簡単かも。 「テーブルのインポート」か「エクセルデータへのリンクテーブル」か どちらかになるでしょうね。 実際には「アクセスで使うテーブル」と、(上記のテーブル)は別にしておくこと。 > 又、データを転送する場合に、アクセスのあるテーブルのデータを全て消去して転送するパターンと、テーブルのデータの最後に追加してデータを転送させたい場合と2種類あります。 テーブルは「コピー」後、貼り付けする際に「テーブルへの追加」指定が可能。 そうすれば「まずアクセスで使うテーブルを空にしてから始める」か 「テーブルはそのままで始める」かで対応できます。

doradora64
質問者

補足

アクセスがエクセルに取りに行く方法は理解しました。 エクセルからアクセスへ送るのは難しいですか? アクセスは私のパソコンにしかインストールしていないので、 他の人がエクセルのデータを更新したらその都度、エクセル側からデータを送ってもらえると大変便利なのですが。

関連するQ&A