dポイントプレゼントキャンペーン実施中!

テーブル:Aがあり、そこに列:甲がある。
CSVデータをテーブル:Bにインポートする。テーブル:Bにも列:甲と同じ規格の列:乙がある。

テーブル:Bのレコードをもとにエクスポート処理を行う際、列:乙の中に列:甲にはないレコードがあった場合、その旨アラートメッセージを表示させたい。
VBAでどのように記述すればいいでしょうか?

環境:Microsoft Access 2003

A 回答 (4件)

なら、ゴールは見えたも同然?


まずは頑張って不一致クエリウィザードを使って
未登録車両を抜き出せるクエリを作成してください。
そのクエリ名を仮に、Q未登録チェック とします。
このクエリだけでも目的の大半は達成かと思います。
あとは前回回答のを流用して

Sub UnknownCarCheck()
'Microsoft Office xx.x Access database engine Object Library←Access2007から出来ました
'または、Microsoft 3.6 Object Libary←2003だと多分こっち のいずれかに参照設定が必要です  
  Dim db As Database
  Dim rs As DAO.Recordset
  Set db = CurrentDb
  Set rs = db.OpenRecordset("Q未登録チェック", dbOpenSnapshot)
  rs.MoveLast

  If rs.RecordCount <> 0 Then
    MsgBox rs.RecordCount & "件不一致あり"
    DoCmd.OpenQuery "Q未登録チェック" 'クエリを開いて確認
  Else
    msgbox "未登録車両はありませんでした"
  End If
  
  rs.Close: Set rs = Nothing
  Set db = Nothing
End Sub

というのを必要な時に行えばどうでしょ。
なお、上記回答は CSVファイルを一時的なテーブルにインポートして
それと車番マスタを照合する場合を想定しています。
    • good
    • 0
この回答へのお礼

お陰様で目的を達せそうです。ありがとうございます。

お礼日時:2013/08/19 16:54

テーブルのTAが


フィールド甲




で、
テーブルのTBが
フィールド乙





とした場合。

不一致クエリウィザードでクエリを作成します。
不一致レコードがあればその分だけ表示されます。
このクエリをSQLビューで開けば、こんなSQL文が得られるはずです。
SELECT TB.乙
FROM TB LEFT JOIN TA ON TB.[乙] = TA.[甲]
WHERE (((TA.甲) Is Null));

このSQL文を使って、DAO なら
Sub test()
Dim db As Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT 乙 FROM TB LEFT JOIN TA ON TB.[乙] = TA.[甲] WHERE (TA.甲) Is Null", dbOpenSnapshot)
rs.MoveLast
If rs.RecordCount <> 0 Then
MsgBox rs.RecordCount & "件不一致あり"
End If
rs.Close: Set rs = Nothing
Set db = Nothing
End Sub
とか?

この回答への補足

回答ありがとうございます。
予想以上に自分には理解が難しく、参考書を開いて理解に努めております。

補足に、具体的なことを書きますと以下のようになります。
社用車の車番とその使用部署を登録した車番マスタがあります。
ガソリン会社から毎月、車両ごと(つまり車番ごと)のガソリン代、消費税を収録したCSVデータが、請求書とともに送られてきます。
社内の経理システムにインポートするため、送られてきたCSVデータを元に取込データを作成します。

車番マスタは、廃車や新車導入により更新されるべきものです。
それらの情報は社内で収集していますが、ときに経理課への伝達が遅れる、或いは遅れることがあります。
取込データを作成する際に、請求ものからのデータに含まれている社番に、経理課の車番マスタに未登録のものがないか、チェッカーを設けたいのです。
通常、車番マスタには請求先から来るデータの車番がすべて収録されています。
未登録のものがあれば、取込データの作成は中止し、車番マスタを整備します。
その際に未登録の車番がわかるようにもしたいのです。

補足日時:2013/08/16 13:03
    • good
    • 0

訂正


X) Nz(DLOOKUP(”甲”, ”テーブルA”, ”甲=’” & テーブルB!乙 & ”’”, ”不一致”)
○) Nz(DLOOKUP(”甲”, ”テーブルA”, ”甲=’” & テーブルB!乙 & ”’”), ”不一致”)

この回答への補足

回答ありがとうございます。
予想以上に自分には理解が難しく、参考書を開いて理解に努めております。

補足に、具体的なことを書きますと以下のようになります。
社用車の車番とその使用部署を登録した車番マスタがあります。
ガソリン会社から毎月、車両ごと(つまり車番ごと)のガソリン代、消費税を収録したCSVデータが、請求書とともに送られてきます。
社内の経理システムにインポートするため、送られてきたCSVデータを元に取込データを作成します。

車番マスタは、廃車や新車導入により更新されるべきものです。
それらの情報は社内で収集していますが、ときに経理課への伝達が遅れる、或いは遅れることがあります。
取込データを作成する際に、請求ものからのデータに含まれている社番に、経理課の車番マスタに未登録のものがないか、チェッカーを設けたいのです。
通常、車番マスタには請求先から来るデータの車番がすべて収録されています。
未登録のものがあれば、取込データの作成は中止し、車番マスタを整備します。
その際に未登録の車番がわかるようにもしたいのです。

補足日時:2013/08/16 13:04
    • good
    • 0

アラートをどのタイミングで出しますか?



一度に判定する方法なら、
インポートしたテーブルBの列:乙と、テーブルAの列:甲を結合するクエリを作り、
そのクエリの件数とテーブルBの件数を比較して、不一致ならアラートを表示。

一行ずつテキストファイル出力する方法なら、
Nz(DLOOKUP(”甲”, ”テーブルA”, ”甲=’” & テーブルB!乙 & ”’”, ”不一致”)
の結果が甲と一致するか判断する。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!