こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAでaccessのデータと比較…

エクセルVBAについてです。

正・誤の2列のみで構成されるエクセルの正誤表があります。フォームのボタン押下のイベントでこの正誤表の「誤」の列すべての値と、10項目程度からなるaccessのデータの正誤表の項目に該当する列の値を比較(検索)して、相違が見つかった場合に、accessデータの該当行をすべてCSV形式で出力するツールを作りたいです。

アタマが混乱中なので質問が分かりにくいと思いますが御力添え願えたら幸いです。

投稿日時 - 2004-06-01 11:06:51

QNo.877283

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

今回のような処理は通常は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

参考になれば幸いです。

投稿日時 - 2004-06-01 15:48:31

ANo.2

どこまでExcelでコントロールするのかで大きく変わってきますね。ACCESSのデータをOfficeリンクの機能を使ってExcelシートに落とし、そのシートをExcel内で比較するならシート同士の比較ですからExcelのVBAのみでも簡単に出来ると思いますが、直接ACCESSのテーブルやクエリをExcelで読み込むとなるとExcelVBA上でDAOやADOを使ってレコードを読み込みを行うようにしなければならないですね。
一回読んでしまえば、後は比較したレコードをワークシートに展開してCSV形式で書き込むだけですがレコード数の制限や性能を考えるとExcelVBAでと言う仕様は疑問ですね。

投稿日時 - 2004-06-01 14:45:07

ANo.1

ExcelのVBAでACCESSをコントロールするより、ACCESSのテーブルリンクでExcelシートをリンクしてACCESS内で処理した方が簡単だと思いますよ。

投稿日時 - 2004-06-01 12:15:16

お礼

早速の回答ありがとうございます。

accessもExcelもまだわずかな知識しか無く、どちらが簡単~という判断はつきかねるのですが…今回はExcelVBAでコントロールするよう指示されています。

Te-Shoさまのご回答は、もう少し知識をつけて幾通りかのやり方を比較してみる段階での参考にさせていただけると思いました。
ありがとうございます。

投稿日時 - 2004-06-01 13:35:32

あなたにオススメの質問