- 締切済み
VBAでaccessのデータと比較…
エクセルVBAについてです。 正・誤の2列のみで構成されるエクセルの正誤表があります。フォームのボタン押下のイベントでこの正誤表の「誤」の列すべての値と、10項目程度からなるaccessのデータの正誤表の項目に該当する列の値を比較(検索)して、相違が見つかった場合に、accessデータの該当行をすべてCSV形式で出力するツールを作りたいです。 アタマが混乱中なので質問が分かりにくいと思いますが御力添え願えたら幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- potedora
- ベストアンサー率47% (66/140)
今回のような処理は通常はACCESSで行うべきでしょうね。 ワークシート変換やCSV出力がマクロとしてあるので 作成も簡単です。 起動がEXCELからというだけなら、ACCESSにマクロを 作成して呼び出すという手もありますが、ADOかDAOを 使用するほうが処理の汎用度は高いでしょうね。 No.2の回答でも指摘されているようにEXCELはデータ量に 制限があるのでデータ量が少ないという前提ですが。 でもいろいろ諸事情があることでしょうから、VBAでの ADO処理のサンプルを以下に示します。 EXCELのセルとの比較、CSV出力は省略してあります。 Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim fld As ADODB.Field ' Open the connection cnn.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\db.mdb;" ' Open the table rst.Open "SELECT * FROM テーブル1 ", cnn ' Read all record While Not rst.EOF For Each fld In rst.Fields 'fld.ValueでACCESSの列値が取れるので 'EXCELのセルと比較してファイルにCSVで出力 Next rst.MoveNext Wend 'Close the recordset rst.Close cnn.Close 参考になれば幸いです。
- Te-Sho
- ベストアンサー率52% (247/472)
どこまでExcelでコントロールするのかで大きく変わってきますね。ACCESSのデータをOfficeリンクの機能を使ってExcelシートに落とし、そのシートをExcel内で比較するならシート同士の比較ですからExcelのVBAのみでも簡単に出来ると思いますが、直接ACCESSのテーブルやクエリをExcelで読み込むとなるとExcelVBA上でDAOやADOを使ってレコードを読み込みを行うようにしなければならないですね。 一回読んでしまえば、後は比較したレコードをワークシートに展開してCSV形式で書き込むだけですがレコード数の制限や性能を考えるとExcelVBAでと言う仕様は疑問ですね。
- Te-Sho
- ベストアンサー率52% (247/472)
ExcelのVBAでACCESSをコントロールするより、ACCESSのテーブルリンクでExcelシートをリンクしてACCESS内で処理した方が簡単だと思いますよ。
お礼
早速の回答ありがとうございます。 accessもExcelもまだわずかな知識しか無く、どちらが簡単~という判断はつきかねるのですが…今回はExcelVBAでコントロールするよう指示されています。 Te-Shoさまのご回答は、もう少し知識をつけて幾通りかのやり方を比較してみる段階での参考にさせていただけると思いました。 ありがとうございます。