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
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
この回答への補足
何度もありがとうございますm(__)m
大体理解出来たのですが、上記のコードを実行すると
---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh
2___商品番号___価格_______名前 ----列名(フィールド名)
3___a-1____________2000______ネックレス ----1列目
---------------------------------
ではなく
---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh
2___商品番号___価格_______名前 ----列名(フィールド名)
3___商品番号___価格_______名前 ----1列目
---------------------------------
と全部が同じになっていまして、色々と試行錯誤しているのですが
全く分からなく、一度の質問で済むところを、こちらの確認不足で
何度も申し訳ないのですが教えていただけませんか?
宜しくお願い致します!
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を適当な名前にしてください。
何かあれば、補足してください。
この回答への補足
ほぼ完璧に出来ました^^
本当に、ありがとうございます!
>コードを実行すると、そのたびにファイルを新規に
>作成するようになっています。つまり、
>
>Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1
>
>において、aaa.csv というcsvファイルを毎回新規に
>作成します。Openとありますが、もし、同じ名前の
>csvファイルがあれば、保存するときに上書きの
>確認を求められます。もしaaa.csvというファイルが
>なければ新規に作成するという仕様になっています。
最後に一点だけ気になる点があったのですが、
エクスポートしたところ、以前にエクスポートしたCSVファイル
(CSVを開いた状態)の下に、追加クエリの様に追加され
上書きの確認の様なものも現れなかったのですが
何が原因なのでしょうか??
度々すみませんが宜しくお願い致します!
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のような数字です。
わからないところがあれば、補足してください。
この回答への補足
上記のコードで、思っていた事は完璧に出来ました!
ありがとうございます!
ただ、こちらのミスで申し訳ないのですが、下記のようにしたい場合何処を触れば良いのでしょうか??
---------------------------------
____A_______________B____________C____________________
1___abcd__________[ 空欄 ]____efgh
2___商品番号___価格_______名前 ----列名(フィールド名)
3___a-1____________2000______ネックレス ----1列目
---------------------------------
もう何点か質問したいのですが、教えていただいたコードですと
ファイルを開いて書き込む?ような気がするのですが
毎回同じ形式でファイルを作成したい場合、一度空白のテーブルをエクスポートし
その後、上記のコードを書けば良いのでしょうか??
最後ですが、テキスト形式にする場合は拡張子を”.txt”に
変更するだけで良いのでしょうか??
お手数ですが、宜しくお願い致します。
No.1
- 回答日時:
エクスポートの対象は何ですか
1行目は列名になりますが
列名を変えたいということでしょうか
文字を書くとはどういう意味ですか
たとえばクエリならフィールド名を別名に変えることもできます
テーブルならクエリを経由すれば可能です
これ以上ならVBAで可能です
具体的にはどういうことをイメージしているのでしょうか
この回答への補足
---------------------------------
____A_______________B____________C____________________
1___abcd
2___商品番号___価格_______名前 ----列名(フィールド名)
3___a-1____________2000______ネックレス ----1列目
---------------------------------
例えば、通常CSV形式でエクスポートをすれば一行目は列名(フィールド名)ですが、一行目のA1フィールドに「abcd・・・」と入れて、二行目を列名にしたいのですが、VBAで可能ですかね??
最終的には、上記の様な事が出来るのであれば、CSVではなくテキスト形式で出力したいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Access(アクセス) Accessのスプレッドシートエクスポートで、シートが追加されてしまう 2 2022/07/16 21:45
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessのエクスポートエラーに...
-
symfowareのSQL文in句をバッチ...
-
Accessのリンクテーブルについて
-
bcpによる、テーブル→CSVファイ...
-
エクスポート時の改行コードに...
-
bcpインサートでのフォーマ...
-
SQL Server のデータをCSVファ...
-
sqlite(spatialite_gui)での...
-
AccessでCSVインポートのゼロサ...
-
「マスタ」と「テーブル」の違...
-
データの二重表示の原因
-
Access VBA [リモートサーバー...
-
SQL 件数取得を速くしたい
-
2つのテーブルから条件に一致...
-
SELECT時の行ロックの必要性に...
-
ACCESSのSQLで、NULLかNULLでな...
-
Accessでの禁止文字チェック
-
エクセル
-
AccessのSQLで、FROM句の構文エ...
-
Accessにインポートしたら並び...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessのエクスポートエラーに...
-
Accessのリンクテーブルについて
-
bcpインサートでのフォーマ...
-
エクスポート時の改行コードに...
-
ACCESSでのエクセルインポート...
-
AccessでCSVインポートのゼロサ...
-
SQL Server のデータをCSVファ...
-
SQLServer2005でフラットファイ...
-
既に使用されているので、使用...
-
symfowareのSQL文in句をバッチ...
-
MS-SQLプロシージャでファイル...
-
SybaseのBCPでファイル上書き
-
アクセスのテーブルからエクス...
-
bcpによる、テーブル→CSVファイ...
-
sqlite(spatialite_gui)での...
-
SQLServer2005 クエリ結果のフ...
-
スクリプトファイルの一括実行
-
ACCESSでのCSVデータの自動取り...
-
DBMAGICのプログラム解析
-
CSVファイルのインポートについて
おすすめ情報