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

締切り済みの質問

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

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

Select * into csvファイル From テーブル名 Where •••

Where句なし、全件ではちゃんと出力できるのですが、
Where句ありだと0件になってしまいます。

Where句指定はできないのでしょうか?

よい方法があれば教えてくださいm(._.)m

環境はフロントAccess ,DBはSQL server
バッチでの出力も試みましたが、
Serverがあるフォルダにアクセス権限がないため、
断念しました。

投稿日時 - 2019-12-09 20:30:09

QNo.9688266

困ってます

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

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

回答(3)

ANo.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
'#############################

投稿日時 - 2020-01-02 13:06:25

ANo.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

投稿日時 - 2020-01-01 23:48:02

ANo.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ファイルに書き出すという方法もあります。



物臭ついでに他のサイトを検索してみましたが、何となく
出来ないようなことがかかれていました。
リンク先の紹介という回答になりますが、分からないところが
あれば補足してください。

投稿日時 - 2019-12-10 02:58:01

あなたにオススメの質問