- 締切済み
修正したデータの件数を知りたい。
アクセス2000、エクセル2000で作成したデータがあります。 どちらのソフトでもいいのですが、修正したデータの件数を調べる方法はありますか。 入力したデータと、修正して元データをなおしたデータとを比べてどこかが修正してあったら、カウント1としていきたいのです。 データは約8万件あるため、目で見るには限界があります。 データの項目は16項目です。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
(1)アクセスはそうなっているのですが、エクセルは各列に項目が記入されている内容・形式ですよね。 縦にID的項目(キー)の違うもののデータが入っているのですよね。 (2)「変更」には書式等(色、フォント・サイズ、配置、書式、計算式、図など)の変更は含まれ「ない」ですよね。 (3)変更後も変わらないID的項目(キー)はありますよね。エクセルワードからコンピューターに入った人は、レコード・キーの考え方が希薄ですが、オフラインバッチ処理から始めたものは、記述がなくて物足りない気がします。 (4)エクセルは行数が6万5千程度が限度と記憶しているのですが、ブックやシートが別になっているのでしょうか。 (#1・#4の答え関連) (5)アクセスでSQLでやれればエクセルもそちらへ一時的 移行をする手もあります。(#4) (6)今後への対策は、#3の通り事前に手を打っておかないと、この手の問題は面倒ですね。 (7)(1)、(2)、(3)の条件を満たせば、各ソフトで キーの昇順で変更前と変更後のシートやテーブルをソートし 、CSV形式で保存します。レコード・キーの重複は無いものとします。 (8)あとは#2のご示唆のソフトを入手せずとも、VBA・VBで、根幹は下記20行ぐらいのMatchingのコーディングで処理できます。 (1)A(変更前),B(変更後)ファイルをオープンする。 両方レコード読みフラグ=”1”に設定。 (2)まずAを読む。キーフィールドをAKにセット。 (3)両方レコード読みフラグ=”1”か。1なら(4)へ、でなければ(5)キー比較へ行く。 (4)Bを読む。キーフィールドをBKにセット。 両方レコード読みフラグ=”0”にする。 (5)キーAKとBKを比較 (6)AK=BKなら、 AK=HighValueなら終わりルーチンへ。 でなければ、対応するフィールド(列)について AF(i)=BF(i)かどうか比較。 不等なフィールドが見つかれば、キーと共に印字等。 両方レコード読みフラグ=”1”にする。(2)へ。 (7)AK<BKならAKは変更レコードなしか「抹消」され たもの。 両方レコード読みフラグ=”0”にして、(2)へ。 (8)AK>BKならレコードは追加されたもの。 BKは「追加」として、印字等する。 (9)Aがファイルの終わりの時、AKにHighValueをセット。(9・・・9や16進のF・・・F) (10)Bがファイルの終わりの時、BKにHighValueをセット。 (11)終わりルーチン。 A,Bファイルをクローズ。終了する。 キーの重複があっても、ロジックを工夫次第で上手くやれる場合もあります。 昔からある方式なんですが、それだけに簡略でデータ数量に 制約されず、利用資源(出費コストも含め)が少ないはず。 時間的問題はA、Bのソート時間です。(1)-(11)の 処理時間はディスクを約8万×2読みに行く時間だけ。
- timber
- ベストアンサー率29% (218/739)
Accessの場合は以下のクエリを作成して件数を数えてはいかがでしょうか。 select '追加' as 変更内容, a1.項目1 from 変更前テーブル a1 where not exists ( select b1.* from 変更後テーブル b1 where b1.項目1 = a1.項目1 ) union select '削除' as 変更内容, b2.項目1 from 変更後テーブル b2 where not exists ( select a2.* from 変更前テーブル a2 where a2.項目1 = b2.項目1 ) union select '変更' as 変更内容, a3.項目1 from 変更前テーブル a3 where exists ( select b3.* from 変更後テーブル b3 where b3.項目1 = a3.項目1 and b3.更新時刻 <> a3.更新時刻 ) Excelの場合は、新たにsheetを作成し下記のようなセルを作ります。 =if(sheet1.a1=sheet2.a1,(sheet1.a2=sheet2.a2,0,1),1) これを必要な行数コピーして、適当なセルに =sum(a1:a80000)とすれば、変更のたびに自動的に計算されます。
お礼
回答ありがとうございます。 次回の参考にさせていただきます。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 Accessなら、例えば[更新チェック]フィールドを新たに作り、データを変更した場合にチェックを入れるようにするとか。 そして、任意のところですべてのレコードのチェックを外し、またそこからの修正をチェックするというようにすればいいと思います。 他は[最新更新日付]のフィールドを作るの方法もあります。これなら、日付範囲で抽出して件数をカウント出来ます。 ただし、既に入力されているデータには、ダミーの日付を入れないといけませんが。
お礼
ありがとうございました。 今度試してみます
- KIMV
- ベストアンサー率15% (82/544)
テキストデータ等に落として,ファイル比較(レコード比較)のソフトを利用すればどうでしょう? 下記のアドレスで探してみてください。フリーソフトが見つかります。 ※私は"CompareJ"と言うのを使ってますが,javaが必要です。
- 参考URL:
- http://rd.vector.co.jp/
お礼
回答ありがとうございました。 一度試してみます。
- yuko6
- ベストアンサー率19% (108/543)
Excelの場合、私だったら「exact」関数を使うかも。 文字列の比較をする関数です。使用例はヘルプ等で確認して下さい。 ちょっと原始的なやり方ですのでもっといい方法が他の方から 出てくると思います。
お礼
回答をありがとうございました。 参考にさせていただきました。
お礼
丁寧な回答をありがとうございました。