- ベストアンサー
AccessのクエリをExcelへエクスポートする際
Access2002でクエリをExcel2002へエクスポートしたのですが、エラーではないのですが、気になることがあります。 なぜか、データの並びが違うのです。なぜクエリの時とExcelシートにした時で勝手にデータが並べ変わっているのか気になって。 一応、過去の質問を調べましたが似た質問を見つけることができなかったので、自分で質問してみます。 ご存知の方がいたら、教えてください。 もし、過去に出ているなら申し訳ないですが、どの質問か教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Accsess のテーブルは(Excel とは異なり)レコードの並び順のデータを持っていません。 したがって、積極的に主キーなどで(例えば #1 の Ribenrenさんがおっしゃっているような方法で)並べ替えをしてやらなければ、どのような順番になるかはまったく保証されません。 Access のテーブル(クエリーも?)をデータシートビューで開いた場合、テーブルに主キーが設定されていればレコードはこの順番で表示されますが、これは単にフィルターがかかっているだけのことで、実際にデータの順番が入れ替わっているのではありません。 ちなみに、主キーがない場合は(フィールドにインデックスを使っていればこの順になりますが)通常は(多分?)入力順で表示されると思います。 ということで、ご質問のエクスポートの際の順番ですが、これはデータが保存されているハードディスク(やMOなどの記録媒体)から読み込まれる順番によると思います。 (つまり、ハードディスクの外周寄りに記録されているレコードから順番にエクスポートされると言うこと。) ですから、基本的にはデータの入力順でエクスポートされることになりますが、もし Access のデータ領域がハードディスク上で断片化(フラグメンテーション)していたりすると、順番は全く予想できないものになってしまいます。 (データのコピーやハードディスクのデフラグなどで、順番が変わってしまう可能性もありそうです。) ちなみに、データベースを最適化すると、レコードは主キーの順番に再格納されるようです。 (ハードディスクの連続した領域に、データベースのコピーやテーブルのインポートを行った場合も?) いずれにしても Access を使う場合には「テーブルには基本的にレコードの順番の概念が無い」ということを常に意識している必要があると思います。 再現のテストを行っていません(意識的に Access のデータに影響するようなフラグメンテーションを作るのって、えらく難しいです。^_^;)ので、「自信なし」の回答ですが・・・・・・。
その他の回答 (1)
並び順が一意に保証されるような Order By 句を書けばよいのでは?
お礼
早速の回答、ありがとうございます。 Order By 句 という言葉を知らなかったためネットで調べました、ありがとうございます。 時間ができたら、それを使ってみようと思います。 ただ、今回質問させてもらったのは、並び替わらないようにする方法を知りたかったのではなく、「なぜ並び替わってしまうのか?」という理由を知りたかったのです。もしご存知の方がいらしたら、お願いします。
お礼
回答、ありがとうございます。 とてもわかりやすく説明していただき、うれしいです。 そして、参考のURLもとても役に立ちました。 >データが保存されているハードディスクから読み込まれる順番によると思います。 なぞが解けて良かったです。 人に質問されて自分でもわからず悔しかったので(笑。 ありがとうございました。