• 締切済み

Access VBAからcsvの出力について

Access VBAからcsvの出力について Select * into csvファイル From テーブル名 Where ••• Where句なし、全件ではちゃんと出力できるのですが、 Where句ありだと0件になってしまいます。 Where句指定はできないのでしょうか? よい方法があれば教えてくださいm(._.)m 環境はフロントAccess ,DBはSQL server バッチでの出力も試みましたが、 Serverがあるフォルダにアクセス権限がないため、 断念しました。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2を以下にしてください。 カンマの処理とかを変更しました。 SQL文や保存するファイル名などは実際に合わせて 変更してください。 Sub test()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim strSQL As String   Dim buf As Variant   Dim i As Long   Dim j As Long   Dim strFileName As String   strSQL = "select * from T顧客 where (T顧客.性='女') and (T顧客.都道府県='広島県');"   strFileName = "名簿"   Set db = CurrentDb   Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)   Open CurrentProject.Path & "\" & strFileName & ".csv" For Output Access Write As #1   '###### データを「""」で囲わない場合 #######   'フィールド名の取得と記入   For i = 0 To rs.Fields.Count - 1     buf = buf & Chr(44) & rs.Fields(i).Name   Next i   buf = Mid(buf, 2)   Print #1, buf   'テーブルデータを追加   buf = ""   Do Until rs.EOF     For j = 0 To rs.Fields.Count - 1       buf = buf & Chr(44) & rs.Fields(j).Value     Next j     buf = Mid(buf, 2)     Print #1, buf     buf = ""   rs.MoveNext   Loop   '################################   Close #1   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub 以下は、データを「""」で囲う場合で、上記の#######で挟んだ部分を 取り換えるとデータが「""」で囲まれたCSVファイルができます。 この確認はメモ帳で開くと確認できます。 必要に応じて変更してください。   '###### データを「""」で囲う場合 #######   'フィールド名の取得と記入   For i = 0 To rs.Fields.Count - 1     buf = buf & Chr(44) & Chr(34) & rs.Fields(i).Name & Chr(34)   Next i   buf = Mid(buf, 2)   Print #1, buf   'テーブルデータを追加   buf = ""   Do Until rs.EOF     For j = 0 To rs.Fields.Count - 1       buf = buf & Chr(44) & Chr(34) & rs.Fields(j).Value & Chr(34)     Next j     buf = Mid(buf, 2)     Print #1, buf     buf = ""   rs.MoveNext   Loop '#############################

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。たぶん以下でいいと思いますが。 いろいろと回答したした後に、訂正などを 繰り返したので、一応たしかめてみてください。 なお、以下でのstrSQLに設定されたSQL文や、 strFileNameに設定されたCSVのファイル名は 適当に設定してください。 Sub test()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim strSQL As String   Dim buf As Variant   Dim i As Long   Dim j As Long   Dim strFileName As String   strSQL = "select * from T顧客 where (T顧客.性='女') and (T顧客.都道府県='広島県');"   '保存するCSVファイルの名前   strFileName = "名簿"   Set db = CurrentDb   Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)   Open CurrentProject.Path & "\" & strFileName & ".csv" For Output Access Write As #1 '#######################################   'フィールド名の取得と記入   For i = 0 To rs.Fields.Count - 1     buf = buf & Chr(44) & rs.Fields(i).Name   Next i   buf = Mid(buf, 2)   Print #1, buf   'テーブルデータの取得と追加   buf = ""   Do Until rs.EOF     For j = 0 To rs.Fields.Count - 1       buf = buf & Chr(44) & rs.Fields(j).Value     Next j     buf = Mid(buf, 2)     Print #1, buf     buf = ""   rs.MoveNext   Loop '#######################################   Close #1   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub なお、上記の'################で囲われた部分は以下でも ほぼ同じ結果になります。違うのはすべてのデータを 「""」で囲っているところです。 出来たCSVファイルをそのまま開くとExcelを利用して 開くことになりますが、メモ帳で開くとその違いが 分かります。CSVファイルの名前を変えて同じデータ でCSVファイルをつくるとわかります。   'フィールド名の取得と記入   For i = 0 To rs.Fields.Count - 1     buf = buf & Chr(34) & rs.Fields(i).Name & Chr(34) & ","   Next i   buf = Mid(buf, 1)   Print #1, buf   'テーブルデータの取得と追加   buf = ""   Do Until rs.EOF     For j = 0 To rs.Fields.Count - 1       buf = buf & Chr(34) & rs.Fields(j).Value & Chr(34) & ","     Next j     buf = Mid(buf, 1)     Print #1, buf     buf = ""   rs.MoveNext   Loop

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

>Where句指定はできないのでしょうか? たぶん、DoCmd.TransferText メソッドを 使ってのCSVファイルへの出力だと思うのですが、 確認していないのでわかりませんが、もし 不可能ならば、 DAOを使っての回答ですが、以前回答した https://okwave.jp/qa/q7324183.html の中で、 Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) のところで、「テーブル1」を 変数strSQLを Dim strSQL As String と設定しておいて、 strSQL = "select * from テーブル名 where ・・・" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) として、CSVファイルに書き出すという方法もあります。 物臭ついでに他のサイトを検索してみましたが、何となく 出来ないようなことがかかれていました。 リンク先の紹介という回答になりますが、分からないところが あれば補足してください。

関連するQ&A