アプリ版:「スタンプのみでお礼する」機能のリリースについて

不可能かもしれませんが、ACCESS2003でCSVエクスポートする時に、CSVの一行目(Excelで言うところのA1セル)に文字を注入する事は可能でしょうか??

初心者ですので、可能であれば簡単に教えていただけませんか??

A 回答 (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
    • good
    • 0
この回答へのお礼

完璧です!!!!

助かりました^^

長々と、本当にありがとうございましたm(__)m

お礼日時:2012/03/01 14:28

少し勘違いしていたところがるので、


以下のようにしてください。

(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

この回答への補足

何度もありがとうございますm(__)m

大体理解出来たのですが、上記のコードを実行すると

---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh

2___商品番号___価格_______名前        ----列名(フィールド名)  

3___a-1____________2000______ネックレス    ----1列目
---------------------------------

ではなく

---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh

2___商品番号___価格_______名前        ----列名(フィールド名)  

3___商品番号___価格_______名前        ----1列目
---------------------------------

と全部が同じになっていまして、色々と試行錯誤しているのですが

全く分からなく、一度の質問で済むところを、こちらの確認不足で

何度も申し訳ないのですが教えていただけませんか?

宜しくお願い致します!

補足日時:2012/03/01 11:15
    • good
    • 0

(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を適当な名前にしてください。


何かあれば、補足してください。

この回答への補足

ほぼ完璧に出来ました^^

本当に、ありがとうございます!


>コードを実行すると、そのたびにファイルを新規に
>作成するようになっています。つまり、
>
>Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1
>
>において、aaa.csv というcsvファイルを毎回新規に
>作成します。Openとありますが、もし、同じ名前の
>csvファイルがあれば、保存するときに上書きの
>確認を求められます。もしaaa.csvというファイルが
>なければ新規に作成するという仕様になっています。


最後に一点だけ気になる点があったのですが、

エクスポートしたところ、以前にエクスポートしたCSVファイル

(CSVを開いた状態)の下に、追加クエリの様に追加され

上書きの確認の様なものも現れなかったのですが

何が原因なのでしょうか??

度々すみませんが宜しくお願い致します!

補足日時:2012/02/29 12:32
    • good
    • 0

方法はいろいろありますが。


以下のコードを標準モジュールに貼り付け、

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のような数字です。

わからないところがあれば、補足してください。

この回答への補足

上記のコードで、思っていた事は完璧に出来ました!

ありがとうございます!

ただ、こちらのミスで申し訳ないのですが、下記のようにしたい場合何処を触れば良いのでしょうか??
---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh

2___商品番号___価格_______名前        ----列名(フィールド名)  

3___a-1____________2000______ネックレス    ----1列目
---------------------------------

もう何点か質問したいのですが、教えていただいたコードですと

ファイルを開いて書き込む?ような気がするのですが

毎回同じ形式でファイルを作成したい場合、一度空白のテーブルをエクスポートし

その後、上記のコードを書けば良いのでしょうか??


最後ですが、テキスト形式にする場合は拡張子を”.txt”に

変更するだけで良いのでしょうか??

お手数ですが、宜しくお願い致します。

補足日時:2012/02/28 16:44
    • good
    • 0

エクスポートの対象は何ですか


1行目は列名になりますが 
列名を変えたいということでしょうか
文字を書くとはどういう意味ですか

たとえばクエリならフィールド名を別名に変えることもできます
テーブルならクエリを経由すれば可能です
これ以上ならVBAで可能です
具体的にはどういうことをイメージしているのでしょうか

この回答への補足

---------------------------------
____A_______________B____________C____________________
1___abcd

2___商品番号___価格_______名前       ----列名(フィールド名)  

3___a-1____________2000______ネックレス    ----1列目
---------------------------------

例えば、通常CSV形式でエクスポートをすれば一行目は列名(フィールド名)ですが、一行目のA1フィールドに「abcd・・・」と入れて、二行目を列名にしたいのですが、VBAで可能ですかね??

最終的には、上記の様な事が出来るのであれば、CSVではなくテキスト形式で出力したいです。

補足日時:2012/02/25 15:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!