Access 2003を使用した10万件のデータのチェック方法について

このQ&Aのポイント
  • Access 2003を使用して10万件のデータに対してチェックを行い、処理時間の短縮方法を探しています。Excelを使用してデータを読み込み、Accessのテーブルにインサート・アップデートしていますが、処理が遅い問題があります。
  • 現在10万件のデータのうち8万件がアップデートの対象であるため、処理時間が非常に長くなっています。アイディアや他の技術を使用することで処理時間を短縮できる方法を探しています。
  • どのような技術や手法を使用すれば、Access 2003を使用した大量のデータ処理を効率的に行うことができるのか、アイディアやアドバイスを教えてください。
回答を見る
  • ベストアンサー

10万件のデータに対してチェックを行う。

こんにちは。Access 2003を使用しています。Accessのテーブルには10万件程度のデータがはいっています。 Excelを開き、1行目から順に読み取って、テーブルにインサート・アップデートをしていきます。 例えば、Excel A列にIDがあったとします。AccessのテーブルにそのIDがなければ、インサート、あればアップデートという仕組みにしています。 データ件数が増えてきて、今は10万件に対し、8万件がアップデートの対象です。処理が終わるのに物凄く時間がかかります。 何かよいアイディアはないでしょうか?例えば、こういった技術を使えばいいとか、こっちの技術を勉強して乗り換えたほうがいいよとかです。よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

ExcelをAccessにリンクしてリンクテーブル とします。Accessのバージョンによっては Excelは読み取りのみになりますが、この場合は 読み取りでいいのでそのままリンクします。 リンク方法は外部ファイルのテーブルをリンクする場合 と同じですが、ExcelのSheet名がテーブル名 になり、フィールド名はExcelで設定している たとえば、A1、A2などにID、商品名などと 設定しているとそれをフィールド名として 設定できます。 ファイルから「外部データの取り込み」を 選択し、「テーブルのリンク」を選択し、 ファイルの種類をExcelに変更し、フォルダに 移動してExcelファイルを選択するとウィザードが 起動されます。 次に、クエリを作成します。たとえば、Excel とAccessにID、商品名があるとして、 先に更新クエリを実行します。 UPDATE Tdata INNER JOIN Sheet1 ON Tdata.ID=Sheet1.ID SET Tdata.商品名=Sheet1.商品名 WHERE Tdata.ID=Sheet1.ID; 続いて、追加クエリを実行します。 INSERT INTO Tdata SELECT * FROM Sheet1 WHERE ID NOT IN (SELECT ID FROM Tdata); このような方法はどうでしょう。なお、 フィールドが他にある場合はクエリの デザインビュー、あるいはSQL文の中で 追加してください。 なお、 実行時エラー「ファイルの共有ロック数が制限を超えています」 というエラーが出れば以下。 http://support.microsoft.com/kb/209940/

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

訂正です。 #3で、 >たとえば、A1、A2などにID、商品名などと としていましたが、 >たとえば、A1、B1などにID、商品名などと にしてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

#3です。 Tdataというのはテーブル名です。

noname#182251
noname#182251
回答No.2

8万件のデータはExcelに記録されているのでしょうか? それならば一旦Accessに読み込み(Accessのテーブルにする)してから追加クエリで処理すれば圧倒的に早くなるはずです。「一旦Accessに読み込み」時の時間は試したことがないですが、それほどかからないのでは?

回答No.1

上の内容を見る限りindexが付いていないような気がします。 AccessテーブルのID列にindexは付いていますか? 付いていなければ付けましょう。劇的に早くなる筈です。 付いていても遅いのであればAccessデータをSQL Serverに入れて試してみたらいかがでしょうか。

関連するQ&A

  • DB内データのソート

     SQLServer2000を使って1週間の初心者です。  現在、ExcelからDBに対して数万件単位でデータをインポートしています。(DTSインポートウィザード使用)  インポート後、Enterpriseマネージャにてデータを見ると、ExcelとDBとの行の位置が異なっています。  (例)2万件を2回インポートした場合   ID_000001 ・ ・   ID_020000   ID_020059 ・ ・   ID_040000 ※ID_020001~ID_020058は、ID_020000以前のレコードの間に存在したりします。  一意である「ID_??????」行でSQL文ソート(ORDER BY)して見た目をExcelと同様の行順にしても、EnterPriseManagerでテーブルを閉じ、再度テーブルを開いたら以前のデータのままです。  ソート状態を上書き保存するようなことはできないでしょうか?  また、Excelと同じ行順でインポートする方法はないでしょうか?

  • エクセルからアクセスのテーブルにデータ追加したい

    Excel(xls)からAccess(mdb)のテーブル(出力)にデータを追加できるVBAコードを教えてください。 条件 Accessの名前と場所 C:\SP3\Print.mdb テーブル名 (出力) (履歴) テーブル構造 (出力) (履歴)ともに、フィールド1~4、ID 履歴テーブルのIDは、カウントアップであり、プリント後のデータが格納される。エクセルでマクロを起動したときに、最初に履歴テーブルの最後のIDを知り、エクセルの対応するID列をレコード分だけ最後のID+1から通番を付ける。通番を付けたら、エクセルのフィールド1~4とIDのレコードセットを出力テーブルの該当列に追加する。 以上がやりたいことです。 エクセルに、10行から100行程度のデータを貼りつけて、このVBAを紐づけたマクロボタンを押したら、履歴テーブルの最後を調べて、その次の番号から順に、上からID列を更新して、その後、出力テーブルに追加したいのです。 検査機器用に専用開発されたプリントソフトがデータベースにAccessを持っていて、プリントソフトのフロントからデータを手入力する仕様なのですが、エクセルで加工したデータをAccessの所定のテーブルに横差ししたい考えです。対象のPCには、Accessをインストールしていないため、エクセル側からテーブルを操作したい理由です。 よろしくお願いします。

  • エクセルで重複チェック

    始めまして。エクセルでデータの重複を確認するのにはどんな手法があるかを考えています。アクセスとかだとできそうですが、エクセルでも何か関数を組み合わせてできるものなのでしょうか?データ件数は1500~2000件くらいで、1データはカタカナ、1列なんですけど・・。宜しくお願いします。

  • Excelのピボットテーブルのデータ数の限界は何件?

    教えてください。 Excelのピボットテーブルのデータ数の限界は何件なのでしょう? 現在、データ数約15,000件、項目数は5行くらいのデータをピボットにしようと思ったのですが、「項目数が多すぎて処理できない」というワーニングが出て止まってしまいます。 ピボットの限界データ件数って何件なのでしょう?

  • ACCESSのデータ量

    あまりに初歩的な質問かもしれませんが、ACCESSのテーブルに収まるデータの件数はどれくらいなのでしょうか。10万行以上あるテキストデータを使うのにEXCELでは無理なので、エディターで必要な部分を抽出などしてからEXCELへ移行しています。ACCESSで可能なら、もう少しACCESSの勉強をしようと思うのですが。

  • ACCESSデータのEXCEL出力

    ACCESSのテーブルデータをEXCEL97に出力する場合、件数の制限がありますか?また、この件について詳しく説明しているようなURLがあれば教えてください。

  • Accessで、複数のテーブルからデータを繋げたい

    ■テーブル1 2011年データ 行:名前 列:年月日 201101~201112 行:商品名 値:件数 ■テーブル2 2010年データ 行:名前 列:年月日 201001~201012 行:商品名 値:件数 となっております。 列を伸ばして、201001~201112までのデータにしたいのですが クエリの組み方が不明です。 ネットでサーチはしたのですが、該当のものが出てこず、良ければ教えて下さい!

  • 初心者:エクセル2007とアクセス2007でのデータのやりとりについて

    初心者:エクセル2007とアクセス2007でのデータのやりとりについて -基本情報- 1 アクセスには管理番号や名称といったいくつかの項目を持つテーブルが存在 2 1で作ったテーブルから管理番号とまだ空欄だがデータが入る予定の列だけを抽出したテーブルが存在 3 1の中から列としては管理番号の列と変更する可能性のある列、行としては管理番号の入っている行のうちの一部を抽出し、エクセルにエクスポート済 4 3のファイルでアクセスでは空欄になっていた列にデータを新規入力 -やりたいこと- 4のファイルの管理番号と2のテーブルの管理番号とが一致したものに関して、アクセスで空欄になっている列にエクセルで新規に入力したデータをインポートすることは可能でしょうか。 また、可能なら、どういった方法があり、どうすればよいでしょうか。ご教授お願いします。

  • ACCESSでの文字列の比較

    はじめまして、こんにちは。ACCESSについて教えてください。あるテーブルに列が1、2とあったとします行は全部で80万行です。1の列にあるデータを一つづつ取り出して、2の列にあるデータと比較し、一致していれば真を返して、一致していなければ偽を返すプログラム(つまり80万×80万の計算になるとおもいます。)を組みたいのですがどうすればいいのでしょうか?エクセルだと簡単にVLOOKUP関数でできると思うのですが、アクセスでのやり方がわかりません。データも80万件もあるのでエクセルが使えません。何かヒントとなるホームページやキーワードを教えていただけないでしょうか。よろしくお願いします。

  • access 2003 1万件以上がカットされる?

    XP SP3でaccess2003を使用しています。 新規作成→プロジェクト(既存のデータ)→データリンクプロパティ で、SQLサーバーのデータを閲覧、編集する事があるのですが、あるテーブルを開いたときに、そのテーブルのレコード件数が10000件より多いと、10000件までしか出てきません。 テーブルのレコードを全てエクセルへコピーし、一括編集したいので、10,000件以上のデータもコピーしたいのですが、これでは不可能です。 何かよい方法はありませんでしょうか。