• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBAでADOを使ってEXCELファイルよりデータを取得し)

EXCEL VBAでADOを使ったデータ取得でSQL実行結果が上手くいかない

このQ&Aのポイント
  • EXCEL VBAでADOを使ってEXCELファイルからデータを取得する際、SQL実行結果が上手くいきません。削除フラグの値を抽出条件にしているため、'1'が入っているデータは削除された古いデータであり、抽出対象外にしたいです。
  • 実行時エラーは発生せず、処理は正常に終了しますが、対象データが取得できません。
  • SQL文や削除フラグのデータに問題があるのか、解決策を教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kazuma299
  • ベストアンサー率100% (4/4)
回答No.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 はずれていたらごめんなさい。 よろしくお願いします。

sinmai_mam
質問者

お礼

画像まで付けていただいて、ありがとうございます。 サンプル通りで正常に取得できました。 Nullを考慮しなければならないのですね。 勉強になりました。 Nullを考慮して他の所も組みなおします!

関連するQ&A