• ベストアンサー

Access2003でのエクスポートについて

不可能かもしれませんが、ACCESS2003でCSVエクスポートする時に、CSVの一行目(Excelで言うところのA1セル)に文字を注入する事は可能でしょうか?? 初心者ですので、可能であれば簡単に教えていただけませんか??

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

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

フィールド名の挿入が抜けていたみたいです。 testプロシージャを以下にしてみてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant Dim strMsg As String Dim i As Integer Dim buf As String strMsg = "同じ名前のファイルが存在します。上書きしますか。" 'ファイル名の入力。入力がなければ出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub '同じ名前のファイルがあった場合に追加するか確認 If funcCheck(CurrentProject.Path & "\" & ret & ".csv") = True Then If MsgBox(strMsg, vbOKCancel, "確認") = vbCancel Then MsgBox "最初からやり直してください" Exit Sub End If End If Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 'Open CurrentProject.Path & "\aaa.csv" For Input As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'フィールド名の取得と追加 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 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

tankarei1987
質問者

お礼

完璧です!!!! 助かりました^^ 長々と、本当にありがとうございましたm(__)m

すると、全ての回答が全文表示されます。

その他の回答 (4)

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

少し勘違いしていたところがるので、 以下のようにしてください。 (1) 以下のコードを標準モジュールに貼り付け、 保存してください。 そのとき、参照設定で Microsoft Scripting Runtime にチェックを入れてください。 'ファイルの存在確認の関数 Function funcCheck(ByVal strPath As String) As Boolean Dim objFso As FileSystemObject Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FileExists(strPath) = True Then funcCheck = True Else funcCheck = False End If Set objFso = Nothing End Function (2) testプロシージャを以下のようにしてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant Dim strMsg As String strMsg = "同じ名前のファイルが存在します。上書きしますか。" 'ファイル名の入力。入力がなければ出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub '同じ名前のファイルがあった場合に追加するか確認 If funcCheck(CurrentProject.Path & "\" & ret & ".csv") = True Then If MsgBox(strMsg, vbOKCancel, "確認") = vbCancel Then MsgBox "最初からやり直してください" Exit Sub End If End If Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 'Open CurrentProject.Path & "\aaa.csv" For Input As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

tankarei1987
質問者

補足

何度もありがとうございますm(__)m 大体理解出来たのですが、上記のコードを実行すると --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- ではなく --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___商品番号___価格_______名前        ----1列目 --------------------------------- と全部が同じになっていまして、色々と試行錯誤しているのですが 全く分からなく、一度の質問で済むところを、こちらの確認不足で 何度も申し訳ないのですが教えていただけませんか? 宜しくお願い致します!

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

(1) >1___abcd__________[ 空欄 ]____efgh のようにする場合は、 Print #1, "abcd" のところを、 Print #1, "abcd" & "," & "" & "," & "efg" & "," のようにします。つまり、abcd、空欄、efgをカンマで 区切りながら行に入れていきます。 (2) >教えていただいたコードですとファイルを開いて書き >込む?ような気がするのですが コードを実行すると、そのたびにファイルを新規に 作成するようになっています。つまり、 Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 において、aaa.csv というcsvファイルを毎回新規に 作成します。Openとありますが、もし、同じ名前の csvファイルがあれば、保存するときに上書きの 確認を求められます。もしaaa.csvというファイルが なければ新規に作成するという仕様になっています。 (3) >毎回同じ形式でファイルを作成したい場合、一度空白 >のテーブルをエクスポートしその後、上記のコードを >書けば良いのでしょうか?? (2)の通りなので、出力したcsvファイルを名前を変えて 保存すればいいのでは、と思います。 (4) >テキスト形式にする場合は拡張子を”.txt”に >変更するだけで良いのでしょうか?? はい、です。 直接テキストにすることも出来ますが いろいろと面倒なことが出てくる可能性があるので 一旦、csvファイルにしてテキストに変更するのが いいのでは、と思います。 追加 すこし、手の込んだことをことするならば、 ファイル名を任意の名前にすることもできます。 インプットボックスに 2月1日の資料 と入れると、 2月1日の資料.csv というcsvファイルができます。 追加の部分も一緒にしてまとめてみると、 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant '(追加の部分)ファイル名の入力。入力がなかったり 'キャンセルならば出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub です。ファイル名の入力が必要がなく、毎回固定の名前で出力するならば、 追加の部分を削除して、 Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 のところを、 Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 にして、aaaを適当な名前にしてください。 何かあれば、補足してください。

tankarei1987
質問者

補足

ほぼ完璧に出来ました^^ 本当に、ありがとうございます! >コードを実行すると、そのたびにファイルを新規に >作成するようになっています。つまり、 > >Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 > >において、aaa.csv というcsvファイルを毎回新規に >作成します。Openとありますが、もし、同じ名前の >csvファイルがあれば、保存するときに上書きの >確認を求められます。もしaaa.csvというファイルが >なければ新規に作成するという仕様になっています。 最後に一点だけ気になる点があったのですが、 エクスポートしたところ、以前にエクスポートしたCSVファイル (CSVを開いた状態)の下に、追加クエリの様に追加され 上書きの確認の様なものも現れなかったのですが 何が原因なのでしょうか?? 度々すみませんが宜しくお願い致します!

すると、全ての回答が全文表示されます。
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

方法はいろいろありますが。 以下のコードを標準モジュールに貼り付け、 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub イミディエイトウィンドウで、testを実行 するか、あるいは、フォームにボタンを貼り付け、 Private Sub コマンド0_Click() Call test End Sub のようにするか、あるいは、testの中身を クリックイベントの中に入れて、 Private Sub コマンド0_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub のようにします。 なお、DAOを使用しているので、 コード表のツールから参照設定を選択し、 Microsoft DAO xx Object Library にチェックが入っているか確認してください。 なお、xxは3.6のような数字です。 わからないところがあれば、補足してください。

tankarei1987
質問者

補足

上記のコードで、思っていた事は完璧に出来ました! ありがとうございます! ただ、こちらのミスで申し訳ないのですが、下記のようにしたい場合何処を触れば良いのでしょうか?? --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- もう何点か質問したいのですが、教えていただいたコードですと ファイルを開いて書き込む?ような気がするのですが 毎回同じ形式でファイルを作成したい場合、一度空白のテーブルをエクスポートし その後、上記のコードを書けば良いのでしょうか?? 最後ですが、テキスト形式にする場合は拡張子を”.txt”に 変更するだけで良いのでしょうか?? お手数ですが、宜しくお願い致します。

すると、全ての回答が全文表示されます。
  • kawai985
  • ベストアンサー率68% (17/25)
回答No.1

エクスポートの対象は何ですか 1行目は列名になりますが  列名を変えたいということでしょうか 文字を書くとはどういう意味ですか たとえばクエリならフィールド名を別名に変えることもできます テーブルならクエリを経由すれば可能です これ以上ならVBAで可能です 具体的にはどういうことをイメージしているのでしょうか

tankarei1987
質問者

補足

--------------------------------- ____A_______________B____________C____________________ 1___abcd 2___商品番号___価格_______名前       ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- 例えば、通常CSV形式でエクスポートをすれば一行目は列名(フィールド名)ですが、一行目のA1フィールドに「abcd・・・」と入れて、二行目を列名にしたいのですが、VBAで可能ですかね?? 最終的には、上記の様な事が出来るのであれば、CSVではなくテキスト形式で出力したいです。

すると、全ての回答が全文表示されます。

関連するQ&A