- 締切済み
エクセルとアクセスのデータ比較(VB6.0)
エクセルとアクセスのデータ比較ツール(VB6.0) 質問者:SSCSC アクセスからエクセルにコピペされたレコードがあるとします。 そのエクセルのレコードのあるフィールド値を変更します。(このとき、アクセスもエクセルと同様に変更します。) 上記は手作業でします。 そこで、そのエクセルのレコードがアクセスに存在するかどうかをプログラムで作成したいと思っております。 要するにエクセルとアクセスのデータ比較をして、一致していないレコードがエクセルに存在した場合は、ログを出力したいと思っています。 アクセスのデータが比較基準になります。 何か簡単にできる方法はないでしょうか。 今思いついている方法は、 エクセルの1行目はコピペ時にアクセスのフィールド名がコピーされているので、 エクセル、アクセス両方のフィールド値を全て比較対象にしてSQL文で存在するかどうかを確認する方法です。 ご回答よろしくお願い致します。
- SSCSC
- お礼率100% (3/3)
- Visual Basic
- 回答数3
- ありがとう数7
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
No2です。 >この動作のソースがすぐに思い浮かばないため、調べてみます プログラムではなくて、アクセスのクエリビルダでクエリを作るだけです。 SQL的には次のような感じです。 SELECT A.* FROM AC AS A LEFT JOIN EX AS B ON A.KEY=B.KEY WHERE A.F1<>B.F1 OR A.F2<>B.F2 OR ・・・ ※ACはアクセス側テーブル、EXはエクセル側テーブル、F1,F2…はフィールドです。
- nda23
- ベストアンサー率54% (777/1415)
アクセスにエクセルのシートをリンクさせて、テーブルのように 扱うことができます。 アクセスのテーブルとエクセルのリンクテーブルをLeft Joinし、 フィールドが不一致のものを抽出条件にすれば簡単に実現できると 思います。(主キーとなるようなものがあると仮定しています)
お礼
ありがとうございます。 イメージはできました。確かに簡単です。 この動作のソースがすぐに思い浮かばないため、調べてみます。 もしすぐにお分かりでしたら教えていただきたく思います。
>エクセル、アクセス両方のフィールド値を全て比較対象にしてSQL文で存在するかどうかを確認する方法です。 いまいちよく判りませんがこれ↑は、何回 SQL 発行することになるんでしょうか? アクセスのデータが基準なのであれば、アクセスの全件データを1回取得して、あとはループで比較すれば良いのではないかと思います。 エクセルとアクセスのデータ並び順に制限をかけられるのであれば、処理速度も確保できる筈です。
お礼
ご回答ありがとうございます。 SQL発行は1回で、エクセルのデータ分ループさせることにするつもりでした。 データ並び順は制限がありません。 例えばアクセスのデータが60レコードあったとします。 そのうちの5レコードを適当にエクセル上に貼り付け編集します。 アクセス側も同様にそのレコードを編集します。 なぜ手作業かは頭から離してください。 データ確認はエクセル、アクセスの編集が整合性がとれているかの確認になります。 やはりSQLでフィールド名全てを条件にしてループで回すしかないですかね。
関連するQ&A
- ACCESSでのフィールド比較方法?
ACCESSで、ある2つのレコードの各フィールドをそれぞれ比較して、フィールドが不一致であるレコードを抽出する機能はありませんか?
- 締切済み
- その他(データベース)
- access → Oracleへのデータ移行(VB.NETで)
お知恵を貸してください。 ただ今、VB.NETでアクセスで開発されたアプリケーションを、 VB.NETに移行する開発をしているのですが、その中で、 現在のDBはアクセス、移行後のDBはオラクル10gなんですが、 何か良い移行方法は無いでしょうか? ちなみに、テーブル名、レコード名は変更しますので、そのまま移行ではありません。 私が考えているのは、アクセスのデータをエクセルにコピペし、 それを.NETで読み込んでテープルに入れて1レコードずつ オラクルに書き込んで行こうと考えております。 しかし、上記の方法でエクセルの読込方法が良く分かりません。 一旦、エクセルに取込む方法の場合の読込方法を教えてください。 また、もっと効率の良い方法をご存知でしたら教えてください。 開発環境は OS : windows XP Pro 開発ソフト : VB.NET DB : Access 2003 SP2 DB : Oracle 10g です。なにぶん、VBでの開発経験が浅いので、 猿でも分かるように(W)お教えいただけると幸いです。
- ベストアンサー
- Visual Basic
- ExcelかAccessで二つのデータが合っているかどうかを調べる方法を教えてください。
二つのセル(フィールド)を比較して、そのデータが同じか違うか結果を別のセルに返したいのですが、そんなことって可能だったでしょうか。 データはA列とB列にほぼ同じデータがあり、その中の完全に一致してないデータだけを抽出したいのです。 行は約1500あります。 Access、Excelのどちらでも構わないのですが、方法をご存知の方がいらっしゃいましたら教えてください。
- ベストアンサー
- その他(ソフトウェア)
- ACCESSテーブル2つのデータの比較について
アクセステーブル2つのデータ比較について質問があります、 宜しくお願いいたします。 Access, Excel, VBは初心者レベルです。 TableA,TableBというフォーマットが同じなテーブルがあり、 データが同じかを比較をし、どちらかのテーブルにないエントリーが ある場合はそれを出したいと思います。 途中まで出来たのですが、uniqueではないデータがある為に正確な情報がでません。 具体的には: TableA | TableB Field1 Field2 | Field1 Field2 AAA 10 | AAA 10 BBB 100 | BBB 100 CCC 200 | CCC 200 CCC 200 | EEE 100 DDD 100 | 希望の答えは Field1 Field2 Field3 CCC 200 NotInB <--- これがでません DDD 100 NotInB <--- これはだせました EEE 100 NotInA <--- これもだせました 以下のようなものを書いたのですが、CCCのエントリーがTableBに 一件あるので件数が違うにもかかわらずひけませんでした。 SELECT TableA.*, "NotInB" as Field3 FROM TableA LEFT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableB.Field1 Is Null; UNION ALL SELECT TableA.*, "NotInB" as Field3 FROM TableA RIGHT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableA.Field1 Is Null; 一致したらフラグを立てて、再チェックしないようにすればいいのだと思うのですが、アクセスのクエリ、VBなどでどのようにすればできますか? もしくはアクセスからxlsなどに落としてから、ファイルの状態で比較 (会社で使うので外部ソフト等が使えません) をVBでするといった方法を検討した方がいいのでしょうか? 色々調べてみたのですが、どっちもやり方が分からないので、 それはそもそも出来ないよなどの アドバイスもございましたら、どうぞ宜しくお願いいたします。
- ベストアンサー
- Visual Basic
- AccessのデータをVBを使って置換する
(1)VisualBasic6.0を用いて、Access2000のデータベースに接続します。 (2)データベースの中のテーブル(テーブル名:T-カレンダー)にあるフィールド(フィールド名:コード)に保存されているデータの一部分を置換したい。(⇒途中のアルファベットを変更したい。)(例;置換前:123FFF789 置換後:123III789) テーブルを直接開いて、フィールドにカーソルをあわせて、”編集メニュー”の『検索と置換』から行っても出来るのですが、Accessを触らないでVBから作ったフォームから変更(置換)をさせたい。 ◇フォームに2つテキストボックスを作って、「検索する文字列」と「置換後の文字列」を入力し、『変換』ボタンを押したら、データが置換される、という流れ。 一回きりの置換でなくて、何回でも同じフィールド内のデータを置換したい。 SQLのREPLACE関数を用いて出来るかな、とは思っているのですが、どのように作成すればよろしいのでしょうか。 また他のやり方でシンプルな方法があればお教えください。
- ベストアンサー
- その他(データベース)
- ACCESSの既存テーブルに、EXCELデータをレコードとして追加する事は可能ですか?
ACCESSの既存テーブルに、EXCELのデータをレコードとして追加する方法はありますか? 又は方法を説明しているサイト等ありましたら教えて下さい。 EXCELのデータは、シートの1行目に各項目名、2行目以降に各データが順次入力されている状態です。 尚、EXCELの項目名と、ACCESSのフィールド名は一致していない状態です。 例えば、 EXCELの項目名:「予約ID」、「予約名」、「予約日」 ACCESSのフィールド名:「rsv_id」、「rsv_name」、「rsv_date」 のような感じです。 ACCESSのフィールド「rsv_id」には、EXCELの「予約ID」項目のデータを入れなければいけません。 こういうことは出来るのでしょうか? ※マクロは使わないようにしたいです。 いったんACCESS上で、EXCELのデータを元に新規テーブルを作成してから、 その新規テーブルからデータを抽出して、既存テーブルにレコード追加するような、SQLを書けばできるでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセル→アクセスのコピペで切り捨てられてしまう
アクセス初心者です。アクセスのバージョンはoffice365です。 アクセスのテーブルをエクセルにコピペして加工し、加工したものを再度アクセスのテーブルに貼り付けるという処理をしています。 あるフィールドが、アクセス→エクセルはうまくいきますが、エクセル→アクセスで255文字でデータが切り捨てられてしまいます。 フィールドのデータ型は「長いテキスト」ですので、検索したところ、64,000 文字までは入るようです。 もともとアクセスで入力をしていて、そのフィールドには255文字以上のデータも入っています。 エクセルへのコピペはうまくいくのに、なぜアクセスに戻す時に切り捨てられてしまうのでしょうか? どうすれば解決できますか?
- ベストアンサー
- Access(アクセス)
- アクセスのデータ取り込みについて
UTF8のテキストデータを取り込みする際 データが10フィールドあるとします。 1レコード目の1フィールド目から9フィールド目までデータがあり、10フィールド目はNULL 2レコード目の1フィールド目から10フィールド目までデータがある場合 テキストデータ自体9フィールド目までしか取り込めない場合がございます。 こういったレコード終端がNULLの場合とNULLでない場合に取り込む際 注意することはありますでしょうか?? 因みにデータを取り込む際、文字コードを指定しフィールドの データ型を変更する際 存在するフィールドに比べアクセス上ではフィールド数が足らなくなるのですが・・・ どうぞよろしくお願いします。
- ベストアンサー
- その他(データベース)
- VB2008 Expressで、Excelファイルへのアクセスについて
VB2008 Expressで、Excelファイルへのアクセスについて質問します。 プログラミングが本業ではありませんが、社内で使用するツールとして、VB6+ADOで、AccessのMDBを使ったDBソフトを作った経験はあります。 そろそろ、.netを勉強しようと思うのですが、手元にあるのは、VB2008のExpressバージョンです。 これを使って、ExcelのxlsをDBのように扱うことは可能なのでしょうか? 「DBのように」というのは、xlsファイルをレコードセットに格納し、条件にあったレコードを抽出することを想定しています。 同様なことが、ExcelVBAで可能ならば、それでもいいのですが。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- ExcelからAccessにデータを取り込む方法
質問します。 Access初心者、VBA初中級者です。 VBAで、ExcelからAccessにデータを取り込んでいます。 ですが、Excelの表はAccessのDBの型と一致していません。取り込む場合、特定の列のデータをAccessの特定のフィールドに取り込むことはできますか? (たとえば、ExcelのA列のデータは、Accessの「品番」フィールドに入れる、B列のデータはAccessの「商品名」フィールドに入れる、というように。) 一時エリアに保存して、それを取り込む方法でもいいです。 現在TransferSpreadsheetを使っていますが、Rangeを指定して一度に全部もってきたいわけではないので、できれば取り込み先を設定したいと思った次第です。 また、Excelは使用行が決まっていないため、取り込みも、できれば 「カラ行になるまで1行ずつ取り込む」というようなコードにしたいです。 お手数をおかけしますが宜しくお願いします。
- ベストアンサー
- その他(データベース)
お礼
ありがとうございます。 この方法よさそうですね。 現時点では、アクセスにクエリを作成すること以外の方法でやることにしました。