• ベストアンサー

エクセルのデータをアクセスへ自動インポート(エクスポート)したい。

いつも大変お世話になっております。m(_ _)m 質問させてください。 エクセルに存在するデータベースのデータを、アクセスにインポートしたいのですが、アクセス側の「取り込み」みたいなボタンを押せば、ある程度自動的にするような仕組みを作りたいです。 「ある程度」というのは、「ボタン1つですべて実行されるように」というところまで自動化されなくても大丈夫です。 参照先、インポート先のテーブル名などのマウス操作は入っても大丈夫です。 そのようなことができますでしょうか? できるだけ具体的に教えていただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 VBAで、DoCmdオブジェクトのTransferSpreadsheetメソッドでよいのではありませんか?  DoCmd.TransferSpreadsheet acImport,       [シートのタイプ],       [テープル名],       [ファイル名],       [Excel側のフィールドを使うかどうか],       [Excelの範囲] 実際のコード  DoCmd.TransferSpreadsheet acImport, , "TestTable", "D:\Test.xls", True, "Sheet1!A1:D20" "Sheet1!A1:D20" これはなくてもよいです。

xchoxcho
質問者

お礼

回答ありがとうございます。 こちらの質問の仕方に不足がありました。 たとえば、エクセルのデータは毎日少しずつ増えていきます。 その「増えた分だけ」インポートする。もしくは、毎回エクセルにあるデータすべて(上書き)するなりを簡素化したいと思います。 頻度はほぼ毎日です。 それを自動化したいのですが、良い方法はないでしょうか?

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 #2 のWendy#02 です。 確かに、DoCmd.TransferSpreadsheet acImport では、Append は、無理かもしれませんね。Excel側で、差分を別シートに出して、TransferSpreadsheet acImportなら、出来ますが、Access 側が中心になると、差分は、取り出すことは出来ても、フィールド情報がないので、Append できません。そうすると、私の知っているのは、Adoぐらいしか技術がありませんので、以下のようなものを作ってみました。 Const は、それぞれ入力してください。また、テーブル名・フィールド名は、それぞれ入れてください。本来は、テーブルのレコード数を別に数えるつもりだったのですが、いっしょにしてしまいました。 なお、今回は、テーブルは、一旦閉じないと更新が分りません。 '----------------------------------------- Option Compare Database Dim myArVal As Variant Dim RightCol As Integer Const Fname As String = "Test.xls" 'Excelブック名 Const ShName As String = "Sheet1" 'シート名 Const RightColA1 As String = "D" '右端の列名 Sub Excel_Apend_ImportSample1() Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim mySQL As String Dim cnt As Long Dim dbRow As Long Dim i As Long  Set cn = CurrentProject.Connection  mySQL = "SELECT Count(TestTable.フィールド1) as cnt from TestTable"  rs.Open mySQL, cn, adOpenStatic  dbRow = rs!cnt  rs.Close  Call ExcelOpen(dbRow)  On Error GoTo RsClose  rs.Open "TestTable", cn, adOpenStatic, adLockOptimistic  With rs   For i = LBound(myArVal, 1) + 1 To UBound(myArVal, 1)   .AddNew    !フィールド1 = myArVal(i, 1)    !フィールド2 = myArVal(i, 2)    !フィールド3 = myArVal(i, 3)    !フィールド4 = myArVal(i, 4)    .Update   Next i  End With RsClose:  rs.Close: Set rs = Nothing  cn.Close: Set cn = Nothing  If Err.Number > 0 Then   MsgBox Err.Number & " " & Err.Description   Err.Clear  Else  Beep  End If End Sub Sub ExcelOpen(FirstRow) Dim xlApp As Object Dim xlshLastRow As Long Dim xlshAdd As String  On Error GoTo Quit 'デフォルトの位置にない場合は、ドライブ\フォルダ をつける  Set xlApp = CreateObject("Excel.Application")  With xlApp.Workbooks.Open(Fname)   xlshLastRow = .Worksheets(ShName).Range("A65536").End(xlUp).Row   'dbのレコード数に+2(フィールド行分+1) ~ Excel の最後の行   xlshAdd = "A" & FirstRow + 1 & ":" & RightColA1 & xlshLastRow   myArVal = .Worksheets(ShName).Range(xlshAdd).Value   .Close  End With Quit: If Err() > 0 Then  MsgBox Err.Description End If xlApp.Quit Set xlApp = Nothing End Sub

xchoxcho
質問者

お礼

回答ありがとうございます。 また、返事が遅くなってすみません。 何度もご丁寧な回答をしていただき、本当にありがとうございます。 上記に挑戦してみます。(私自身もVBAには自信がありませんがやってみます) また分からないことがあったら補足させていただくと思いますので、まだ締め切りませんが・・・ よろしくお願いします。m(_ _)m

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

アクセスに「外部データの取り込み」「インポート」「エクセルファイル」 の「操作」があるのをご存知ですね。 にもかかわらず、「自動的」に拘るのですか。 であればVBAでの処理になると思いますが、質問の書き方からして不安を覚えますが、VBAの回答を、自分の場合に当てはめて、修正はできますか。 >毎日少しずつ増えていきます。その「増えた分だけ」インポートする。 (#1の補足)データを入力した日付はエクセルデータにありますか。その日単位にアクセスに送ってはどうでしょう。 エクセルで日単位にデータを別シートに分けるのはどうするか判りますか。

xchoxcho
質問者

お礼

回答ありがとうございます。 また、お返事が遅くなりすみません。 アクセスに「外部データの取り込み」があるのはもちろん知っています。 操作する側の問題で、できたら(いや、確実に)「自動化」したい状況です。 お手数おかけしてすみません。

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.1

エクセルで作ったデータをCSVで吐き出して、 アクセスでインポートすると理解すればよろしいでしょうか? アクセスのフォームにインポートボタンを作成してクリックイベントで VBAが起動するように作ればよいと思います。 詳しくは下記のHPを参考にしてみてください。 http://www.accessclub.jp/bbs3/0067/superbeg25315.html

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=23127&fo
xchoxcho
質問者

お礼

回答ありがとうございます。 こちらの質問の仕方に不足がありました。 たとえば、エクセルのデータは毎日少しずつ増えていきます。 その「増えた分だけ」インポートする。もしくは、毎回エクセルにあるデータすべて(上書き)するなりを簡素化したいと思います。 頻度はほぼ毎日です。 それを自動化したいのですが、良い方法はないでしょうか?

関連するQ&A

  • ACCESS97のインポート・エクスポートについて

    ACCESS97を使用しています。 インポート・エクスポートについて下記の質問があります。それぞれ  ファイル-外部データの取り込み-インポート  ファイル-名前を付けて保存/エクスポート で実行できます。  また定期的に実行したい場合、フォーム上の操作によって  モジュール(プロシージャ)を実行させ インポート・エクスポートする方法も  見たことがあります。 今回 教えてほしいのは  Q1   ファイルの操作とモジュールの作成以外で    インポート・エクスポート操作   をする方法はあるのかどうか です。    また関連して  Q2 EXCELファイルからインポートすることは可能かどうか  Q3 SLKファイルへエクスポートすることは可能かどうか  教えて頂きたいと思います。

  • エクセルからアクセスへのインポートについて

    エクセルにある複数のファイルをアクセスへインポートしようとしています。エクセルには数百のシートが存在し、アクセス上で個々のテーブルにインポートしたいと考えています。一つ一つやればいいのですが、マクロなどを使って、自動的にインポートする方法はないのでしょうか?何卒よろしくお願いいたします。

  • ACCESSのインポートやエクスポートの定義

    はじめまして windows7 ACCESS2007 を使用しております。 ACCESSは初心者レベルになります。 現在作成中のシステムでACCESSを使用しており、 データのインポートやエクスポートを頻繁に行います。 定義の保存は行っていまして、そこから実行すれば良い事も判ったのですが、 毎回「保存済みのインポート操作」や「保存済みのエクスポート操作」を開くのが 手間に感じております。 他の処理につきましてはボタンにて起動する様に出来たのですが、 インポートやエクスポートの操作がボタン化出来るかが判りません。 是非アドバイスなど頂けますと幸いでございます。 宜しくお願い申し上げます。

  • Access2007へCSVデータなどをインポートしたい

    Access2007において顧客データベースを運用しています。 定期的に他のデータベースから書き出したCSVファイルを この顧客データベースの中にインポートしたいのですが可能ですか? CSVのデータををテーブルとしてインポートすることはできるのですが、 データベースの中身(データ)のみを項目ごとに割り振って流し込みたいのです。 よろしくお願いいたします。

  • エクセルからアクセスにインポートする際のエラーについて

    こんにちは。 エクセルで作成された従業員台帳を、アクセスにインポートしたいのですが、エラーが出て困っています。 インポートの為のフォームを作り、参照ボタンでそのエクセルファイルを選択してフルパスを取得し(こちらの動作はOKです)、実行ボタンでそのファイルをインポートする、という方法をとろうと思います。 transferspreadsheet で、エクセルのファイル(.xls)は問題なくいくのですが、csv形式のファイルを指定して同じようにインポートすると、 実行時エラー 3274 外部テーブルのフォーマットが正しくありません。 となってしまいます。 書いているコードは、 DoCmd.TransferSpreadsheet acImport, 8, "従業員台帳(アクセス側でのテーブルの名前)", "上記画面で取得したフルパス", True(一番上の項目をフィールド名として使用します), "" です。.xlsでも.csvの形式でもインポートできるようにしたいのです。 環境は、winXPpro、Access2000、Excel2000 です。 よろしくお願いします。

  • Access2003でインポートをマクロで簡単に自動化したいです。

    Access2003でインポートをマクロで簡単に自動化したいです。 今はAccess2003でインポートをマクロにしたい時は、インポートする画面でインポート定義を作っておいて、マクロのテキスト変換でマクロにしています。 これだと、テキスト変換の画面でインポート元のフルパスを指定して、インポート先のテーブルのファイル名を指定しなくてはいけません。 インポート定義を作ってるのだから、定義と同じインポート元、インポート先で簡単にマクロでインポートを自動化する方法はありませんか? マクロにしたいインポートとエクスポートが結構な数あるので、マクロを作る時にいちいちフルパスとファイル名をコピーしてくるのが大変です。 簡単にインポートをマクロにする方法がありましたら、教えてください。

  • Accessのテーブルへのデータインポートについて

    Accessのテーブルへのデータインポートについて Access2002で、A.mdbのTESTテーブルからB.mdbのTESTテーブル(構造は同じ)へテーブルデータをインポートしたいのです。 TESTテーブルの主キーはSEQ(オートナンバー)しかありません。 そのときに、コピー元とコピー先の主キーに重複があった場合、オートナンバーなので自動で再付番しデータが追加して欲しかったのですが、 Accessの機能のエクスポート、インポートでは、コピー先に主キーに重複があったデータは上書きされてしまいます。 テーブルを開き、データをコピー&ペーストしますと、ペーストしたときにオートナンバーで自動で再付番されます。 この方法でもいいのですが、データが数百万件あるので、現実的ではありません。 Accessのインポート・エクスポートで、オートナンバーで主キーを再付番してから、B.mdbのTESTテーブルにデータ追加する方法はないでしょうか? よろしくお願いいたします。

  • アクセス:エクセルからのインポート方法について

    エクセルからアクセス(アクセス初心者です。よろしくお願いします。) ・エクセルの行コピー(数字の上で)コピーしてアクセスのテーブルのレコードへ貼付するがエラーが出てうまくいかない。(作業担当者が通常のインポートもできないほどのスキルでこの方法なら可能という事情があります) ・エクセルのデータベースシートを通常のインポートでアクセスのテーブルにとりこみ、今度は逆にエクセルにエクスポートしたものを、また上記のように行コピー&アクセスのレコードへ貼付すると簡単にできる。 このことをどのようなしくみの違いがあると理解したらよろしいのでしょうか?今後の作業や簡易システム構築の為の参考に教えてください。

  • Access97 Excelファイルのインポート

    はじめまして、こんにちわ。 早速ですが、質問させてください。 Access97で既存のテーブルにExcelファイルをインポートした際にエラーがでてインポートできないファイルがありました。その原因を調査している次第です。 Excelファイルは様々な担当者に作成いただく予定ですので、エラーの再現性を確認して、原因となる作業を予め禁止しておきたいと考えております。 (1)ファイル→外部データ取込→インポートからインポートするExcelファイルを選択し、インポートボタンを押したところ、『ファイル○○にアクセスできません。このファイルが存在するか、またファイルの形式が正しいか確認してください』と言うエラーが出ます。 実際にそのファイルは開けますし、同じように作成したファイルはインポートできるものもあります。 中身を全てコピーし、新規作成したExcelファイルに貼り付けて名前をつけて保存したものをインポートすると、問題なくインポートできました。 どういった作業をすると、上記エラーが出るようなファイルになってしまうのでしょうか。 (2)ファイル→外部データ取込→インポートからインポートするExcelを選択し、インポートボタンを押した後、ワークシートインポートウィザードで『先頭行をフィールド名として使う』をチェックすると、『先頭行にAccessフィールド名に使用できない文字が含まれています。』というエラーが出ます。 調べてみると、空白の列がフィールドとしてインポートされるようになっています。Excel上では何も表示されていない列で、その列を削除すればエラーがなくなります。 どういった作業をすると、空白の列や行がインポートされるようになってしまうのでしょうか。 お手数ですがよろしくお願い致します。

  • accessへのexcelデータのインポート

    友人からもらったaccess(2000)の管理表にEXCEL2003で作ったデータをインポートしたいのですが、類似質問も調べてみたのですがわからないので、教えてください。 管理表にはすでに、テーブル、クエリ、フォームが作られています。 テーブルの既存データをすべて削除して、新しいexcelデータをインポートしたいのです。 1.既存のテーブAを開き外部データの取り込みからexcelデータをウィザードに従って進めていくと、テーブルAはすでに開いていますとなり、インポートできません。 2.次に開かない状態で同様に進めて、インポート先のテーブルAを指定して完了をクリックするとインポートするときにエラーが発生し、インポートできませんとメッセージが出ます。 3.excelのシート名での新規データインポートは出来るのですが、既存のテーブルAに新しいデータのみインポートするにはどのようにすればいいのか?教えてください。 4.既存の管理表にはテーブルが20、クエリが50、レポートが13で構成されていて、その中の2つのテーブルに新規データ(約2000件)をインポートしたいのです。 まったくの素人に毛が生えた程度で思い違いもあるかと思いますが、データのみ変更してソフト自体はそのまま使用したいので、よろしくお願いいたします。 質問の内容に不足がありましたら補足しますのでよろしくお願いいたします。

専門家に質問してみよう