- ベストアンサー
EXCEL VBAでADOを使ったデータ取得でSQL実行結果が上手くいかない
- EXCEL VBAでADOを使ってEXCELファイルからデータを取得する際、SQL実行結果が上手くいきません。削除フラグの値を抽出条件にしているため、'1'が入っているデータは削除された古いデータであり、抽出対象外にしたいです。
- 実行時エラーは発生せず、処理は正常に終了しますが、対象データが取得できません。
- SQL文や削除フラグのデータに問題があるのか、解決策を教えていただけないでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >上記を実行すると、対象データはあるのに取得できません。 取得できない対象データの削除フラグは、空のセルになっていると想像しました。 空のセルはNullという値になっています。 条件「削除フラグ <> '1'」は、真になりません。 >mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1')" 以下のようにすると、取得できなかった対象データも取得できると思います。 削除フラグの条件に OR 削除フラグ IS NULL を追加しています。 mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1' OR 削除フラグ IS NULL)" 確認に使ったサンプルプログラムを添付します。 確認に使ったサンプルデータを画像添付します。 Dim oConn As New ADODB.Connection Dim adoRS As ADODB.Recordset Dim mySql As String 'エクセルファイルに接続 With oConn .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties").Value = "Excel 8.0" .Open "E:\test\q6209009.html\test.xls" End With mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1' OR 削除フラグ IS NULL)" Set adoRS = oConn.Execute(mySql) Do Until adoRS.EOF Debug.Print adoRS!名前; adoRS!削除フラグ adoRS.MoveNext Loop '接続を閉じる oConn.Close はずれていたらごめんなさい。 よろしくお願いします。
お礼
画像まで付けていただいて、ありがとうございます。 サンプル通りで正常に取得できました。 Nullを考慮しなければならないのですね。 勉強になりました。 Nullを考慮して他の所も組みなおします!