• ベストアンサー

マイクロソフトアクセス2007

あるフォルダにエクセルのファイル"A"があります。 この"A"はほぼ毎日更新され内容が新しくなっていきます。 アクセスで、このエクセルのファイルをインポートし、あるテーブルの最後のレコードの下に追加したいのですが、クリック1つでこの動作を行える様にしたいです。 しかし、この"A"が以前インポートした時から更新されていれば、インポートをし、以前インポートした時から更新されていなければ、インポートをしない様にしたいのです。でないと、クリックした時に、以前と同じデータを追加してしまうので、新しいデータだけを追加できる様にできますか? この"A"は会社の他部署が更新していき、又、アクセス側でインポートをするのもバイトの方が行うので、この様にミスができない様にしたいのです。誰か教えて下さい。よろしくお願いします。

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

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

アクセスのマクロでインポートするのではなくExcelのマクロでアクセスにデータを収める方法です。 dailydataが"A"です。 マクロは別のExcelファイル(dailyupdate.xlsとでもしておいてください) Sub Updatecheck()   Dim FSysObj As Object   Dim inppath As String   Dim DBpath As String   Dim inpfile As Object   Dim DBfile As Object   inppath = "D:\ddd\daylydata.xls"   DBfile = "D:\ddd\業務DB.mdb"   Set FSysObj = CreateObject("Scripting.FileSystemObject")   Set inpfile = FSysObj.GetFile(inppath)   Set outfile = FSysObj.GetFile(outpath)   If inpfile.DateLastModified < outfile.DateLastModified Then       DOupdate_proc   End If   Application.DisplayAlerts = False   Application.Quit End Sub Sub DOupdate_proc()   Dim DB接続 As ADODB.Connection   Dim DB接続str As String   Dim 累積TBL As Recordset   Dim inppath As String   Dim outpath As String   inppath = "D:\ddd\daylydata.xls"   outpath = "D:\ddd\業務DB.mdb"   Workbooks.Open inppath   ここでADOを使ってaccessのテーブルに追加    End Sub

doradora64
質問者

お礼

丁寧な回答ありがとうございます。 私は無知なので、ADOという物がいまいちよくわかりません。 検索し、調べてみたのですが、あまりよくわかりませんでした。

その他の回答 (2)

回答No.3

回答2です。 >しかし、この"A"が以前インポートした時から更新されていれば、インポートをし、以前インポートした時から更新されていなければ、インポートをしない様にしたいのです。 これでは、「以前と同じデータを追加してしまう」ことを防げません。ファイルAにインポート済みのデータがあるからです。 同じデータを追加しないためには、ファイルAのデータをインポートする度にファイルAの中味を消去しておく必要があります。 ただ、これにしても人のやることですから、テーブルにあるデータと同じものをまた入力しないという保障はありません。 ですから結局は、ファイルAとテーブルデータの突合せが必要になります。どちらにしてもファイルの更新日付で判断できるものではありません。 なお、accessをメインにした考え方としては、 ・本番用と同じフィールドを持つ作業用テーブルを用意し、ファイルAのデータを作業テーブルにインポートする。 ・両テーブルから不一致分クエリを作成して本番にないデータを抽出し、本番テーブルに追加。 ・作業テーブルのデータを削除 という感じです。 これらをマクロ登録しておけばいいでしょう。

doradora64
質問者

補足

なるほど、言われてみれば確かにインポート済みのデータを追加してしましますね。 クリック一つで、"A"からデータをインポートし、クエリを作成し本番テーブルに追加し、作業テーブルのデータを削除する事は可能ですか? これらは簡単にできますか?教えて下さい。お願いします。

回答No.2

どのフィールドの組み合わせが一致すると「同じデータ」と見なすのか、について具体的に書かれていないので具体的な回答は困難です。 一般的には、入力日時などのフィールがない限り、ファイルAのレコードとテーブルのデータを1件1件突き合せないと無理でしょう。

関連するQ&A

  • Access(アクセス)でのインポートについて

    テーブルのインポートでエクセルファイルをインポートしたいのですが「ワークシートインポートウィザード」の画面でテーブルを指定して保存すると 「Microsoft Access」の画面で「すべてのデータをテーブルに追加できませんでした。 キー違反のため、0件のレコードのデータが失われ、0件のレコードが削除されました。」と出てきて、保存できません。 もとのテーブルのデータ型を使ってインポートするにはどうしたらいいのでしょうか。よろしくお願いします。 インポートする元のデータ(エクセル)とインポート先(アクセス)の関係は次の通りです。 エクセルファイル    アクセスのテーブル (セルの書式設定)   データ型、フィールドサイズ --------------------------------------------- 数値          数値型、長整数型 文字列         テキスト型、16 インポートする前に元のエクセルデータをアクセスのデータ型に合わせただけではダメなのでしょうか

  • ACCESS2002、レコードのインポートができません!

    初心者です、よろしくお願いします。 ■ 仕様環境 WinXP Access2002 アクセス2002で顧客管理システムを作ってます。 アクセスAのテーブルにアクセスBのテーブルをインポートする時、 レコードだけインポートできないのでしょうか? どうしても違うテーブルが作られてしまいます。 例えば・・ アクセスAに「住所」という項目があり、そこには既にレコードが 何件か入っているのですが、そこにアクセスBの「住所」のレコードを追加したいのですが、 うまくいきません。そういう機能はついていないのでしょうか? また、アクセスBの情報をエクセルファイルに変えて「次のテーブルに保存する」で インポートしたのですが、最後の「完了」ボタンを押すと「エラーが発生し、 インポートできませんでした」という表示がでてインポートできません。 同じように電話番号や名前、メールアドレス等もアクセスAに追加したいのですが、 一つ解決しないと先に進まない気がするのでとりあえず住所だけにしぼってみました。 データを”追加”するような感じでしたいのです! 誰かお知恵を貸してください!

  • マイクロソフト アクセスについて

    アクセス2010を使っています。アクセス超初心者です。 現在エクセルで販売実績を管理しているのですが、アクセスに移行したいと思っています。 今まではエクセルで月ごとに、   商品A         商品B       商品C 担当者 金額    担当者 金額    担当者 金額  ・・・ という表形式で実績を保存していました。(リンクステーション内にファイルが置いてあり、毎日各支店店長が入力していっています。) また、支店ごとにファイルが違うので1か月ごとに支店の数分(8店)ファイルが増えていってる状況です。 これをアクセスのテーブルで、  月   商品名(A~C)   販売金額  担当者    という形で過去の実績を入れなおしたいのですが、このままインポートするとエクセルのフィールドが 上記のような形になっているので思ったようにデータがインポートできません。 これはやはり手入力にするか、エクセルを手直ししてインポートしていくしかないのでしょうか。 何か楽にデータをインポートできる方法がありましたらご教授ください。 宜しくお願いします。

  • ACCESSについて

    アクセスでエクセルのデータを取り込んで使用していますが、 アクセスでテーブルのレコードを更新または追加した場合にエクセルのデータにも反映させるようにしたいのですが、何か方法はありますか。

  • Access2003 データ型 オートナンバーについて エクセルからテ

    Access2003 データ型 オートナンバーについて エクセルからテーブルをインポートする方法 主キーである、IDと名をつけたフィールドのデータ型は"オートナンバー"でレコード新規入力際、自動で番号がふられていくようにしています。 このテーブルにエクセルのレコードをインポートして追加したいのですが、インポートできません。 ※オートナンバーフィールドが原因と思われます。 どうすれば、エクセルからこのテーブルにレコードをインポートし、追加されたレコードにオートナンバーで番号を割り振る事が出来ますででしょうか? 最も、シンプルな方法をお教え願います。

  • マイクロソフト Accessのクエリーについて

    Accessにおいて、 (1)A列、B列、C列をもつデータがテーブルにあります。 これに対して、 (2)A列、B列、C列、D列、E列をもつデータがテーブルに別途あるとします。 (1)に対して、(2)はA列、B列、C列に合致しているデータがいくつあるのか、            A列、B列のみ合致しているデータがいくつあるのか、           A列のみ合致しているデータがいくつあるのか、           A,B,Cいずれも合致していないデータはいくつあるのか? それぞれのデータを(1)と照らし合わせて(2)から抜き出そうとした場合には、 どのような抽出方法が効率いいのでしょうか?またクエリーは複数に なってもかまわないのですが、いずれかで抽出された(2)のデータはいずれも 重複して抽出されない、かぶらない(上から順に抽出をかける)ことを前提にした場合の もっとも適な抽出方法はありますでしょうか。 以下はおまけです(もし余力があれば) ↓ また3つ合致しているデータにはそのレコードの横に列を新しく追加して1とふる、   2つ合致しているのはそのコードの横に列を新しく追加して2とふる   1つ合致しているのはそのコードの横に列を新しく追加して1とふる   0つ合しているのはそのレコードの横に列を新しく追加して0とふる、 という作業をAccessでするとした場合、一致クエリー&更新クエリー&マクロ等で 実現できるのでしょうか? もしよいお知恵あればご教授いただきたく、 お願いいたします。

  • ACCESSでcsv テーブルを利用する良い方法は?

    いつもお世話になっています。ACCESS はまったくの素人です。 csv で提供される6種類程度の元データがあり、定期的にファイル単位で更新されます。これを現在はテーブルにリンクしているのですが、処理が重くて困っています。インポートすると劇的に軽くなりますが、元ファイルの更新時に手間が増えて困ります。具体的には再度インポートしてテーブルを上書きするとリレーションシップが切れてしまうので、一度全てのレコードを削除して、新たに全レコードを追加すると言う手順を思い描いています。 このような場合、どうするのが効率的なのでしょうか。よろしくお願いいたします。

  • ACCESS エクセルから インポート

    アクセスは メインテーブルとサブ(サブフォームで入力)からできています。 エクセルのデータは メインの項目名とサブの項目名が入ってます。 エクセルのデータで メインテーブルのキーとなるものは 追加と更新が混在しています。 この状態で エクセルから アクセスのテーブルに インポートする方法がわかりません。 よろしくお願いします。

  • アクセスの更新クエリの質問です。

    ちなみにAccess2007を使用しています。 A,B,C,Dというフィールドが有り、AフィールドにはCodeが入っています。 Bフィールドには"bb"という言葉、Cフィールドには"cc"という言葉にそれぞれ書き換え、Aフィールドには、今から更新する1レコードを抽出するため、更新クエリ実行時に、パラメーターを入力するように設定しました。 しかし、更新するレコードは、全45000件中、6000件くらいあり、いちいちコードを入れるのが大変です。 もともと、書き換えるためのコードリストがエクセルデータとして有り、Accessにインポートすれば、コードリストをAccessのテーブルにする事も出来ます。このテーブルを使って簡単に、書き換えることは出来ないものなのでしょうか?

  • Accessにインポートしたら並び順が変わっちゃった

    Access2000 を使っています。 ExcelデータをAccessテーブルにしようとしましたが、全項目をテキスト型で入れたいのに、自動的に各項目の型が変わってしまうので、一旦CSVに落としてAccessにインポートしました。 ところが、インポートされたテーブルではレコード順が違っちゃっているんです。 総数は変わっていませんから、全て入ってはいるんでしょうが。 いったい何がいけないんでしょうか。多量のデータをインポートするのに不安でいけません。誰か教えて下さい。

専門家に質問してみよう