• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのACCESSファイルのテーブルを比較する方法)

2つのACCESSファイルのテーブルを比較する方法

このQ&Aのポイント
  • ACCESSデータベースファイル1.accdbとACCESSデータベースファイル2.accdbの各テーブルを比較する方法についてまとめました。
  • 両者のファイルサイズは異なるが、テーブルの生成方法などによるものであり、バイナリ比較でも一致しない場合があります。
  • ACCESSの機能やVBAを利用してテーブルの一致確認を行うことができますが、他のツールや方法でも可能です。

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

  • ベストアンサー
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.4

#2です。 >サイズが異なった場合には、 >実際のテーブルのデータのどこかが異なっている >と一般的に言えるのでしょうか? 失礼しました。勘違いしておりました。 ちなみに、それぞれのテーブルのレコード数は同じってことで よいんですかね(レコード数の違いだけなら不一致クエリですぐ 分かるハズなのでわざわざ質問しないはず)。 で、どこかのフィールドで異なった値が入ってるのではないか ・・・ってことを知りたいってことなんでしょうか。 VBAを使わないとなると、 ファイル1のテーブルA  ファイル2のテーブルA ID     ------------- ID フィールド1 ------------ フィールド1 フィールド2 ------------ フィールド2   ・           ・ フィールド10 ---------- フィールド10 っていうクエリAを作ります。 ※別のaccdbを作るか、ファイル1にファイル2のテーブルAを  リンクします。 例えばテーブルAのレコード数が1万レコードだったとして 全てのフィールドの内容が一致してたら、このクエリも 1万レコードになるはずです。どこかのフィールドに異なった 値が1つあれば、9999レコードになります。 で、このクエリAとファイル1のテーブルAとの不一致クエリ を作成します。 そうすれば、何レコード目に異なった値があるかは確認できます。 ※要するにファイル1のテーブルAにはあって、クエリAにはない  IDが分かる。 とはいっても、どのレコードかってのが分かるだけであり どのフィールドが異なっているかは上記だけでは把握できません。 フィールド数が少なければ、目視で比較してもよいかもしれませんが。。 とりあえずどのレコードか(どのIDか)さえ分かれば、そのID 限定でクエリを作って、比較すればよいかと思います。 それぞれのテーブルAをIDで紐付けて、上記で分かったIDを条件とし それぞれのフィールドが一致しているか比較すればよいかと思います。 SQLだと、 SELECT [テーブル1].ID, IIf([テーブル1]![フィールド1]=[テーブル2]![フィールド1],"○","×") AS フィールド1判定, IIf([テーブル1]![フィールド2]=[テーブル2]![フィールド2],"○","×") AS フィールド2判定・・・って感じです。 ※テーブル1がファイル1のテーブルA、テーブル2がファイル2のテーブルA 上記の方法はフィールド数が多く、比較するテーブル数も多いと 余計に手間がかかってしまいますので、ここまで書いてしまいましたが お勧めできないやり方です。

yam2012
質問者

補足

回答ありがとうございます。 >ちなみに、それぞれのテーブルのレコード数は >同じってことでよいんですかね はい。レコード数もフィールド数も同じです。 >どこかのフィールドで異なった値が入ってるのではないか >・・・ってことを知りたいってことなんでしょうか。 はい。すべてのフィールドの値が一致していることを 確認できればいいです。 >ファイル1のテーブルA  ファイル2のテーブルA > ID     ------------- ID >フィールド1 ------------ フィールド1 >フィールド2 ------------ フィールド2 >っていうクエリAを作ります。 は、 不一致クエリウィザードで作成したクエリに対して (ウィザード画面では1つのフィールドしか結線できないので) デザインビューで ID      -----------> ID フィールド1 -----------> フィールド1 フィールド2 -----------> フィールド2 というように結線すればよいのでしょうか。 これが正しいとして >このクエリAとファイル1のテーブルAとの >不一致クエリを作成します。 は、 不一致クエリウィザードで、 テーブルAと、 クエリのラジオボタンを選択して 先ほど結線したクエリAとを選択して 同様にウィザードを進めていけば よいのでしょうか。 >上記の方法はフィールド数が多く、 >比較するテーブル数も多いと >余計に手間がかかってしまいます 手で一から入力するのは大変なので 不一致クエリウィザードで生成した クエリ式をコピーして 修正するようにしています。 よろしくお願いします。

その他の回答 (11)

回答No.12

>1つよく分からない現象が起きていたのですが 該当の症状に当たった事は無いですが「マイクロソフトならありそうなバグ」かも知れません。 「Accesssのクエリのソートを信じない」と言うのも「1つの手としてアリ」かも知れません。 クエリでソートせずに、直にテーブルをCSVファイルにエクスポートして、コマンドプロンプトのSORTコマンドを使って、出力したCSVファイルをソートする、と言う方法も試してみて下さい。 コマンドプロンプトでソートしての比較は、以下のようにします。 C:\TEMP>SORT テーブル1.CSV > テーブル1.SRT C:\TEMP>SORT テーブル11.CSV > テーブル11.SRT C:\TEMP>FC テーブル1.SRT テーブル11.SRT いちいちクエリを作るよりは、こっちの方が手っ取り早いかも知れません。

yam2012
質問者

お礼

テキストファイルに出力すると 改行コードが入っていたため、行が分割されていました。 改行コードを削除してからテキストファイルに出力して、その後、 教えていただきました方法でソートと比較することができました。 ありがとうございました。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.11

補足が長文すぎて全て読んでません(笑 すみません。 >一部のレコードが抽出されています。 >(つまり一致していないレコードがあるのです) >そのうちの1つのレコードについて、 >両テーブルのこのレコードを調べても違いが見当たりません。 >つまり、一致しているはずなのに抽出されているのです。 結局、本チャンのテーブルで同じように試してみたら 一致してないレコードがいくつかあって、その内1つの レコードを両テーブルて見比べてみたけど、違いが無さそう ・・・ってことですかね。 それって目視で確認されたのでしょうか。 ※一見、違いが無さそうでもスペース有無や全角半角など  の違いがあったりします。 本チャンのテーブル2つをIDで紐付けて選択クエリを 作成します。 例えば、ID100が一致してなかったとしたら、IDの条件を 「100」として下さい。 次に、両テーブルのフィールド1の値が同じか否か 確認する為に、 フィールド1判定: IIf([テーブル1]![フィールド1]=[テーブル2]![フィールド1],"○","×") としますフィールド1の値が異なっていたら×となります。 もし○だったら、フィールド1に関しては差異が無いという ことで、上記の[フィールド1]の箇所を[フィールド2]に書き換えて、 フィールド2を比較して・・・感じで全てのフィールドを確認 してみてはどうでしょうか。 フィールド数が多いと面倒ですが そうすれば、とりあえずどのフィールドの値が異なっている かは分かります。

yam2012
質問者

お礼

まったく同じテーブルなのに 不一致と判定される原因が分かりました。 一致していなかったレコードの1つを 確認してみましたところ、IIF文が実行される以前に、 JOIN ONの条件式にマッチしていませんでした。 (○も×も表示されていませんでした) どのフィールドでマッチしていないのかを調べてみると、 ある特定のフィールドでマッチしていないことが 分かりました。このフィールドの値は どちらも数値型でNULLになっていました。 調べてみましたところ、NULL同士の比較は、 WHEREの条件式では一致と判定されるのに対して、 JOIN ONの条件式では不一致と判定されるようです。 NULLを具体的な数値(0など)に変更して確認してみると、 正しく判定されるようになりました。この結果、 回答No9の補足コメントの(1)(2)および(1)~(13) の2つの方法のいずれにおいても、本チャンの テーブルでもすべて一致するようになりました。 念のため、一方のテーブルの値を別の値に変更して 比較すると変更したレコードだけが不一致の レコードとして検出されました。 これで2つのACCESSファイルのテーブルを正しく 比較することができるようになりました。 いろいろ親切に教えて頂きまして ありがとうございました。

回答No.10

>元の並び順でファイルが出力されてしまいます。 >並び替えをした並び順で「テキストファイル」を出力するには >どうすればよいのでしょうか。 全てのフィールドを「昇順」で並び替えするように指示した「並び替えだけを行なうクエリ」を作成して、それをエクスポートして下さい。 なお「フィールドは*を使わず、すべて指定」して下さい。 例えば、テーブルに項目が6つあったら SELECT フィールド1,フィールド2,フィールド3,フィールド4,フィールド5,フィールド6 FROM テーブル1 OEDER BY フィールド1,フィールド2,フィールド3,フィールド4,フィールド5,フィールド6; のようなクエリを作って、そのクエリの結果をエクスポートします。

yam2012
質問者

お礼

そうでした。この方法がありました。 これでソートが正しくできました。 ありがとうございました。 なお、この操作をしている最中に、 1つよく分からない現象が起きていたのですが、 もしこの理由が分かりましたら教えてください。 最初は全部のフィールドをOEDER BYに指定していて、 なぜかソートの結果が正しくありませんでした。 この原因を調べていて、 フィールド1,フィールド2,フィールド3,フィールド4の 4つのフィールドで1つのレコードが一意に決まるため、 OEDER BY フィールド1,フィールド2,フィールド3,フィールド4; でソートをすると正しい並び順でソートされます。 フィールド5,フィールド6をこの後に追加したとしても この並び順に変化はないと思われるのですが、 OEDER BY フィールド1,フィールド2,フィールド3,フィールド4,フィールド5,フィールド6; としてソートをすると、 フィールド4の並び順が逆転する現象が起きるのですが、 このようなことがありえますでしょうか。 よろしくお願いします。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.9

>選択クエリウィサードの2ページ目の画面で >次へボタンをクリックすると、 >下記のダイアログが表示されて >ここから先に進められないのですが? ウィザードから作れないのであれば、デザインから やってみて下さい。そっちの方が簡単かも。 作成⇒クエリデザイン を開きます。 追加するテーブルはテーブル1、テーブル11 の 二つです。 で、前回回答したように各フィールドを紐付けします。 テーブル1    テーブル11 ID  ------------ID フィールド1-------フィールド1 フィールド2-------フィールド2 ※クエリデザインの画面上で、テーブル1のIDをドラッグしたまま  テーブル11のIDにひっぱれば紐付きます。 で、テーブル1のID、フィールド1、フィールド2を 表示させるようにして下さい(IDだけでもよいです)。 そうすると、ID1だけが抽出されると思います。 ※ID2はそれぞれのテーブルでフィールド2の値が異なるので  抽出されません。 まずはここまで出来るかやってみて下さい。

yam2012
質問者

補足

回答ありがとうございます。 >まずはここまで出来るかやってみて下さい。 ここまで出来ました。 一致しているレコード(ID=1)だけが抽出されました。 ---SQLコード--- SELECT [テーブル1].*, [テーブル11].* FROM テーブル1 INNER JOIN テーブル11 ON ([テーブル1].ID = [テーブル11].ID) AND ([テーブル1].[フィールド1] = [テーブル11].[フィールド1]) AND ([テーブル1].[フィールド2] = [テーブル11].[フィールド2]); --------------- 回答No.7の分かりやすい説明で、こちらも出来ました。 一致していないレコード(ID=2)だけが抽出されました。 (不一致のレコードが正しく抽出されている) ---SQLコード--- SELECT [テーブル1].ID, [テーブル1].[フィールド1], [テーブル1].[フィールド2], [クエリ1].[テーブル11].ID, [クエリ1].[テーブル11].[フィールド1], [クエリ1].[テーブル11].[フィールド2] FROM テーブル1 LEFT JOIN クエリ1 ON ([テーブル1].[フィールド2] = [クエリ1].[テーブル1].[フィールド2]) AND ([テーブル1].[フィールド1] = [クエリ1].[テーブル1].[フィールド1]) AND ([テーブル1].ID = [クエリ1].[テーブル1].ID) WHERE ((([クエリ1].[テーブル11].ID) Is Null)); --------------- 以上のことを整理すると、 2つのテーブルのレコード数、フィールド数が同じ場合は、 (1) まず、1つ目のテーブルに、2つのテーブルを、   全フィールドが等しい条件で内部結合する。   この結果、   全フィールドが一致しているレコードのみが抽出される。 (2) 次に、1つ目のテーブルに、先ほど内部結合したテーブルを、   全フィールドが等しい条件(*1)で左結合する。   この結果、一致していないレコードの2つ目のテーブルの   全フィールドの値はNullになっているので、   2つ目のテーブルのどれかのフィールドの値が   Nullのレコードを抽出すれば、   一致していないレコードのみが抽出される。   (*1)サンプルのテーブルではIDが一意なので     IDフィールドが等しい条件のみでも可 これで一見正しいように思えるのですが 今回のテスト用のテーブル1ではなく、 実際の大きなテーブルで確認してみると、 (accdbファイルをコピーして同じテーブルで確認) (1)で一部のレコードが抽出されていません。 (つまり一致していないレコードがあるようです) そのうちの1つのレコードについて、 両テーブルのこのレコードを調べても違いが見当たりません。 つまり、一致しているはずなのに抽出されていないようなのです。 実は、回答No5を頂いた時に、 >例に書かれているケースなら、 >フィールド2同士を紐付けなければなりません。 のようにしてみたら正しく検出されたので、 すべてのフィールド同士を紐付けて確認をしていたのですが、 今回とまったく同じ現象に陥っていました。 以下にこの時の具体的な手順を示しておきます。 回答No1の補足コメントの(1)~(8)の手順の後、 (9) クエリのデザインを編集するを選択して完了ボタン (10) デザインビューが表示されて、    テーブル1のIDとテーブル11のIDが--->で結線されている。 (11) 同様に、    テーブル1のフィールド1とテーブル11のフィールド1、    テーブル1のフィールド2とテーブル11のフィールド2    を各々--->で結線する。 (12) この時のSQL式は、 --------------------- SELECT [テーブル1].ID, [テーブル1].[フィールド1], [テーブル1].[フィールド2], [テーブル11].ID, [テーブル11].[フィールド1], [テーブル11].[フィールド2] FROM テーブル1 LEFT JOIN テーブル11 ON ([テーブル1].[フィールド2] = [テーブル11].[フィールド2]) AND ([テーブル1].[フィールド1] = [テーブル11].[フィールド1]) AND ([テーブル1].[ID] = [テーブル11].[ID]) WHERE ((([テーブル11].ID) Is Null)); ---------------------    となっている。 (13) 実行すると不一致のレコードが表示される。    (不一致のレコードが正しく抽出されている) 以上のことを整理すると、 テーブル1に、テーブル11を、 全フィールドが等しい条件で左結合する。 この結果、全フィールドが一致しているレコードの テーブル11の全フィールドはNullではない。 一方、少なくとも1つのフィールドが一致していない レコードのテーブル11の全フィールドはNullになっている。 テーブル11のIDがNullのレコードのみを抽出すれば、 一致していないレコードのみが抽出される。 これで一見正しいように思えるのですが、 今回のテスト用のテーブル1ではなく、 実際のテーブルで確認をしてみると (accdbファイルをコピーして同じテーブルで確認) 一部のレコードが抽出されています。 (つまり一致していないレコードがあるのです) そのうちの1つのレコードについて、 両テーブルのこのレコードを調べても違いが見当たりません。 つまり、一致しているはずなのに抽出されているのです。 これらの原因が分かりますでしょうか。 よろしくお願いします。

回答No.8

途中から失礼します。 例えばですが以下のような二つのテーブルがあったとします。 主キーはFF1フィールド。 テーブル名 T1         T1c FF1 FF2    FF3     FF1  FF2    FF3 1 いろは   2000/4/28   1  いろはん  2000/4/28 2 にほへと  2000/2/29   2  にほへと  2000/2/29 3 ちりぬるを 2000/1/1    3  ちりぬるを 1999/12/31 4 わかよ   2000/12/31   4  わかよん  2000/12/31 5 たれそ   2001/1/1    6  たれそ   2001/1/1 7 ん      双方の共通したFF1キーのチェックは SELECT FF1, Count(*) AS Imitation FROM (SELECT * FROM T1 UNION SELECT * FROM T1c) AS Q1 GROUP BY FF1 HAVING (Count(*)=2); で、 FF1 Imitation 1     2 3     2 4     2 となります。(仮に同一ならなにも返ってきません) どのフィールドが異なっているか・・・はご勘弁ください。 どちらか一方にしかないFF1は、 SELECT FF1, Count(*) AS Alone FROM (SELECT * FROM T1 UNION ALL SELECT * FROM T1c) AS Q1 GROUP BY FF1 HAVING (Count(*)=1); で、 FF1 Alone 5  1 6  1 7  1 どっちのテーブルに孤立したFF1があるか・・・では 上記クエリを、『Q孤立チェック』として SELECT 'T1' AS TableName,Q1.FF1 FROM Q孤立チェック Q1 INNER JOIN T1 ON Q1.FF1 = T1.FF1 UNION ALL SELECT 'T1c' AS TableName ,Q2.FF1 FROM Q孤立チェック Q2 INNER JOIN T1c ON Q2.FF1 = T1c.FF1; で、 TableName FF1 T1     5 T1     7 T1c    6 となります。 ご参考まで。

yam2012
質問者

お礼

フィールドかレコードの数が同じでない場合に こちらの方法で対処できそうです。 ありがとうございました。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.7

続きを書いておきます。 先ほど作ったクエリのレコード数とテーブルのレコード数が 同じであれば、各フィールドの値も同じということになります。 違っていたら次に進みます。 先ほど作ったクエリとテーブルで不一致クエリを作成します。 画像のようにテーブルのIDとクエリのIDを紐付けて、結合プロパティは 「テーブルの全レコードとクエリの同じ結合フィールドのレコード だけを含める」とします。線が----→になるはずです。 で、クエリのIDはIs Nullとします。 これで、テーブルにあってクエリに無いIDが抽出されます。 ※要するにフィールドの値が異なっているIDが抽出されます。 IDが分かれば、それぞれのテーブルでこのIDのフィールドの値に 違いが無いかを確認することになります。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.6

>は、 >不一致クエリウィザードで作成したクエリに対して >(ウィザード画面では1つのフィールドしか結線できないので) >デザインビューで >ID      -----------> ID >フィールド1 -----------> フィールド1 >フィールド2 -----------> フィールド2 >というように結線すればよいのでしょうか。 違います。 不一致クエリではなく、選択クエリです。 単純に両テーブルの各フィールドを紐付けるだけです。 結合プロパティは「両方のテーブルの結合フィールドが 同じ行だけを含める」にして下さい。 ※画像のようにして下さい。 で、このクエリがテーブルのレコード数と同じであれば 各フィールドの値も全く同じということになります。 もし違っていたら、どこかしらの値が等しくないと いうことになります。 前回の回答にも書いたように、テーブルが1万レコード あるのに、クエリでは9999レコードしかない場合は どこかの1レコードでどこかのフィールドの値が異なって いるということになります。 まずは、ここまで理解できますか?

yam2012
質問者

補足

>不一致クエリではなく、選択クエリです。 選択クエリウィサードの2ページ目の画面で 次へボタンをクリックすると、 下記のダイアログが表示されて ここから先に進められないのですが? 具体的には、 (回答No.1の補足コメントと同じように) 1) 2つのaccdbファイルを作成してどちらにも   同じ以下のテーブル1を作成します。   ただし、(D/E)の部分は、一方のファイルではD、   もう一方のファイルではEにしておきます。   ---テーブル1----   ID フィールド1 フィールド2    1   A       B    2   C      (D/E)   ---------------- 2) 別のaccdbファイルで、「外部データ」タブの  「インポートとリンク」グループの「Access」の   「リンクテーブルを作成してソースデータにリンクする」で   2つのaccdbファイルのテーブル1のリンクを作成する。   この結果、ナビゲーションウインドウに、  「テーブル1」と「テーブル11」という名前の   リンクテーブルが表示されている。 3)「作成」タブの「クエリ」グループの「クエリウィザード」で   新しいクエリのウィザードが表示される 4)「選択クエリウィザード」を選択して「OK」ボタン 5) テーブル/クエリのボックスの▼で  「テーブル:テーブル1」を選択して>>ボタンをクリックする。 6) テーブル/クエリのボックスの▼で  「テーブル:テーブル11」を選択して>>ボタンをクリックする。 7) 右側の「選択したフィールド」のボックスに、   テーブル1.ID   テーブル1.フィールド1   テーブル1.フィールド2   テーブル11.ID   テーブル11.フィールド1   テーブル11.フィールド2   の6つが表示されている。 8) 次へボタンをクリックすると   タイトルが「選択クエリウィザード」で、  「選択したフィールドのレコードソースにアクセスできません。テーブルと、そのテーブルを基にしたクエリのフィールドを選択した可能性があります。もしそうであれば、テーブルかクエリのどちらかのフィールドだけを選択してください。」   というメッセージのダイアログが表示されます。 (同じリンクテーブルを使っても、 回答No.1の補足コメントの不一致クエリウィサードでは このようなダイアログは表示されていません) よろしくお願いします。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.5

#2です。 >この最後の部分のWHERE ((([テーブル11].ID) Is Null))がよく分からない。 テーブル1の全IDに対して、テーブル11にないIDを抽出する場合、 このようにします。要するに不一致クエリです。 例えば、 テーブル1  テーブル11  ID ---------→ ID  1       1  2       3  3 この場合、テーブル1のID全件に対して、テーブル11に存在 しないID=「WHERE ((([テーブル11].ID) Is Null))」で抽出される ので、結果、ID2が抽出されます。 >不一致レコードが検出されませんでした。 そりゃそうです。両テーブルともにIDは1、2存在しますから 不一致ではありません。 例に書かれているケースなら、フィールド2同士を紐付けなければ なりません。 ご参考まで。

回答No.3

>「不一致クエリウィザード」で確認していたのですが、 不一致クエリウィザードは「2つのテーブルが同じかどうか」には使えません。 不一致クエリウィザードは「特定のフィールド1つ」しか比較しません。 7)の操作の部分で「ID」を選んだ場合「IDフィールドについて、テーブル1にあって、テーブル11にないレコード」のみを抽出し、他のフィールドは無視されます。 なので、クエリで比較する場合は ・「ID」など、ユニークなキーが1つは必要 ・ユニークなキーでテーブルを連結する必要がある ・ユニークなキーが「片方のテーブルにしかない物」をWHERE句で抽出する ・連結に用いないフィールドはWHERE句で不一致の物を抽出する という処理が必要になります。 もし、ユニークなキーが無い場合は、クエリでの比較は出来ません。 テーブルに「ID」「フィールド1」「フィールド2」の項目があった場合、以下のようなクエリが必要になります。 SELECT * FROM テーブル1 LEFT JOIN テーブル11 ON テーブル1.ID = テーブル11.ID WHERE (テーブル11.ID Is Null) OR (テーブル1.フィールド1<>[テーブル11].[フィールド1]) OR (テーブル1.フィールド2<>[テーブル11].[フィールド2]) UNION SELECT * FROM テーブル1 RIGHT JOIN テーブル11 ON テーブル1.ID = テーブル11.ID WHERE テーブル1.ID Is Null; このクエリは「テーブル1にあってテーブル11にない物」と「テーブル11にあってテーブル1にない物」と「テーブル1にもテーブル11にもあるけど、他のフィールドがもう一方のテーブルの内容と異なる物」を抽出しています。 このクエリは、以下のクエリ SELECT * FROM テーブル1 LEFT JOIN テーブル11 ON テーブル1.ID = テーブル11.ID WHERE テーブル11.ID Is Null UNION SELECT * FROM テーブル1 RIGHT JOIN テーブル11 ON テーブル1.ID = テーブル11.ID WHERE テーブル1.ID Is Null UNION SELECT * FROM テーブル1 INNER JOIN テーブル11 ON テーブル1.ID = テーブル11.ID WHERE (テーブル1.フィールド1<>[テーブル11].[フィールド1]) OR (テーブル1.フィールド2<>[テーブル11].[フィールド2]) の冗長な部分を削って短くした物です。 もうお判りかと思いますが、フィールドが何十個もあれば、比較するWHERE句が長大になり、場合によっては「クエリで抽出できない」可能性があります。 当方は「ソートした状態でCSVファイルにエクスポートして、テキストファイルで比較する方法」を強くお勧めします。

yam2012
質問者

補足

回答ありがとうございます。 >方法2 >各テーブルの内容を「ソートした状態でCSVファイルにエクスポート」 >して、1.accdbから抽出したCSVと、2.accdbから抽出したCSVを、 >テキスト比較する。 (1) テキストファイルに出力する時の   ソートの仕方がよく分からないのですが、   テーブルを表示して、ソートするフィールドを選択して、   「ホーム」タブの「並べ替えとフィルター」グループの昇順ボタンで   表示上はソートされます。   念のため、この状態でテーブルを保存しておきます。   この後、「外部データ」タブの「エクスポート」グループの   「テキストファイル」で、エクスポートのウィザードが表示されて、   この2ページ目のエクスポートフォーマットのサンプルのボックス   を見ると並び順が元の並び順で表示されています。   このまま進めると、このサンプルのボックスに表示されている   元の並び順でファイルが出力されてしまいます。   並び替えをした並び順で「テキストファイル」を出力するには   どうすればよいのでしょうか。または、   「テキストファイル」を出力する時にソートする設定が   どこかにあるのでしょうか。 (2) 3つ以上のキーでソートすることはできますでしょうか。 よろしくお願いします。

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.2

>なお、テーブルの生成方法の違いか何かの理由で >両者のファイルサイズは一致していません。 とりあえず、両accdbファイルで最適化を実施してみて サイズが同じになるか確認してみてはどうでしょうか。 ちなみにa.accdbをコピーしてb.accdbを作成しました。 コピーした直後は同じサイズですが、例えば、a.accdb内の テーブルのフィールド幅を少し広くしただけでも a.accdbの方がサイズが40KBほど大きくなりました。 で、a.accdbを最適化すると、またb.accdbと同じサイズに なりました。 ってことで、テーブルの内容が同じであっても、ちょっとした 操作でサイズが変わってしまうようです。

yam2012
質問者

補足

>とりあえず、両accdbファイルで最適化を実施してみて >サイズが同じになるか確認してみてはどうでしょうか。 最適化を実行した後の2つのaccdbファイルの サイズが同じになった場合には、 実際のテーブルのデータがすべて一致している とは一般的には言えないので、 別の方法で確認する必要があると思いますが、 サイズが異なった場合には、 実際のテーブルのデータのどこかが異なっている と一般的に言えるのでしょうか? サイズが異なっていても、 実際のテーブルのデータがすべて一致している場合も ありえるとなると、 最適化した後のファイルのサイズがどちらになっても、 一致しているのか一致していないのかが分からないので、 この確認をする意味がなくなってしまいますので・・・ よろしくお願いします。

関連するQ&A