Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2010)
CSVファイルへエクスポート時に“”(全角ダブルクォーテーション)をつけたい
投稿日時: 21/08/15 14:56:40
投稿者: おーさん0729

お世話になります。
   
今、FileMakerからAccessへのシステム移行をしています。
 
CSVファイルへのエクスポート時に“”(全角のダブルクォーテーション)をつけたいです。
文字列の“”はエクスポート時に""(半角のダブルクォーテーション)に置き換わってしまいます。
具体的には、
"あいう“えお”かき"とあれば、"あいう""えお""かき"となってしまいます。
 
Chr関数も使ってみましたが、うまくできませんでした。
 
宜しくお願いします。

回答
投稿日時: 21/08/17 23:08:03
投稿者: よろずや

おーさん0729 さんの引用:
CSVファイルへのエクスポート時に“”(全角のダブルクォーテーション)をつけたいです。
全角のダブルクォーテーションを含むデータをCSVファイルとして出力したい
という事でしょうか。
 
Option Compare Database
Option Explicit
 
Sub ExportCsv()
Dim db As DAO.Database
Set db = CurrentDb()
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("テーブル1", dbOpenTable, dbReadOnly)
Dim fn As Integer
fn = FreeFile()
Dim FilePath As String
FilePath = Application.CurrentProject.Path
Open FilePath & "\データ1.csv" For Output As #fn
Do Until rs.EOF
Write #fn, rs!フィールド1.Value
rs.MoveNext
Loop
Close #fn
rs.Close
End Sub

回答
投稿日時: 21/08/18 09:34:52
投稿者: WinArrow
投稿者のウェブサイトに移動

>今、FileMakerからAccessへのシステム移行をしています。

Csvの関係をきちんと説明しましょう。
 
 
↑の説明を、
FileMakerのデータをCsvファイルを介してAccessへ移行する
と解釈すると、
CSVに出力するのは、FileMaker側であり、Accessの問題ではないですyね?

投稿日時: 21/08/18 20:06:38
投稿者: おーさん0729

よろずや さんの引用:
おーさん0729 さんの引用:
CSVファイルへのエクスポート時に“”(全角のダブルクォーテーション)をつけたいです。
全角のダブルクォーテーションを含むデータをCSVファイルとして出力したい
という事でしょうか。
 
Option Compare Database
Option Explicit
 
Sub ExportCsv()
Dim db As DAO.Database
Set db = CurrentDb()
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("テーブル1", dbOpenTable, dbReadOnly)
Dim fn As Integer
fn = FreeFile()
Dim FilePath As String
FilePath = Application.CurrentProject.Path
Open FilePath & "\データ1.csv" For Output As #fn
Do Until rs.EOF
Write #fn, rs!フィールド1.Value
rs.MoveNext
Loop
Close #fn
rs.Close
End Sub

 
その認識で合ってます。
上記、コードを流用して、.valueをして全角のダブルクォーテーションはcsvで出力できるようになりました。
別フィールドでは、文字列中に"(半角のダブルクォーテーション)があるところもあり、両方に対応は難しいでしょうか?
"くけこ"さし"すせそ"といった文字列です。
 
宜しくお願いします。

投稿日時: 21/08/18 20:12:19
投稿者: おーさん0729

WinArrow さんの引用:
>今、FileMakerからAccessへのシステム移行をしています。

Csvの関係をきちんと説明しましょう。
 
 
↑の説明を、
FileMakerのデータをCsvファイルを介してAccessへ移行する
と解釈すると、
CSVに出力するのは、FileMaker側であり、Accessの問題ではないですyね?

 
申し訳ございません。説明不足でした。
 
FileMakerのデータをcsvファイル(A)にエクスポートする
そのcsvファイルをAccessにインポートする
Accessのデータをcsvファイル(B)にエクスポートする
AとBのデータの差異をなくしたいです。(かぎりなく同じデータファイルを作成したい)
 
Accessにインポート時点では、全角ダブルクォーテーションはそのままでした。
ですので、Accessからのエクスポート時にうまくいってないと思っています。
 
宜しくお願いします。

回答
投稿日時: 21/08/18 21:09:10
投稿者: hatena
投稿者のウェブサイトに移動

引用:
FileMakerのデータをcsvファイル(A)にエクスポートする

このファイルのサンプルを提示してもらえませんか。
 
例えば、
 
項目1,項目2
"あいう“えお”かき","くけこ"さし"すせそ"
 
とか。
 
項目1,項目2
あいう“えお”かき,くけこ"さし"すせそ
 
とか。
 

投稿日時: 21/08/18 21:26:51
投稿者: おーさん0729

hatena さんの引用:
引用:
FileMakerのデータをcsvファイル(A)にエクスポートする

このファイルのサンプルを提示してもらえませんか。
 
例えば、
 
項目1,項目2
"あいう“えお”かき","くけこ"さし"すせそ"
 
とか。
 
項目1,項目2
あいう“えお”かき,くけこ"さし"すせそ
 
とか。
 

 
FileMakerかr
      フィールド1(テキスト)
1レコード目 "あいう“えお”かき","111","","ああ"
2レコード目 "くけこ"さし"すせそ","222","","いい"
といった感じです。フィールド数は大半を割愛しています。
 
よろしくお願いします。

回答
投稿日時: 21/08/18 21:45:22
投稿者: hatena
投稿者のウェブサイトに移動

引用:
      フィールド1(テキスト)
1レコード目 "あいう“えお”かき","111","","ああ"
2レコード目 "くけこ"さし"すせそ","222","","いい"
といった感じです。フィールド数は大半を割愛しています。

変に加工せずにCSVファイルそのままコピーして貼り付けてもらった方がいいです。
 
それを元に検証実験してみたいので。
 
下記のような感じでしょうか。
 
フィールド1,フィールド2,フィールド3,フィールド4
"あいう“えお”かき","111","","ああ"
"くけこ"さし"すせそ","222","","いい"

 
1行目はフィールド名
フィールドはカンマ区切り(,)
テキストフィールドは"区切り
という仕様なのかな。
 
CSVファイルといってもいろいろ仕様の違いがあるのでその辺をはっきりさせておかないと、正確の回答はできませんので。

回答
投稿日時: 21/08/18 22:06:54
投稿者: hatena
投稿者のウェブサイトに移動

フィールド1,フィールド2,フィールド3,フィールド4
"あいう“えお”かき","111","","ああ"
"くけこ"さし"すせそ","222","","いい"

 
というようなCSVファイルだとしたら、
まずはインポートするときに、ウィザードで
「先頭行をフィールド名として使う」にチェックを入れて、
テキスト区切り記号を「{なし}」に設定します。
 
エクスポートするときも、同様に、
「先頭行をフィールド名として使う」にチェックを入れて、
テキスト区切り記号を「{なし}」に設定します。
 
これで、
元のCSVファイルと同じにエクスポートできます。
テキスト区切り記号を「{なし}」に設定しておくのがミソです。これをしないと、"を含むデータを正しくインポート/エクスポートできません。
 
もし、VBAで自動化したいのなら、
上記のインポートとエクスポートを手動でして、ウィザードの最後で、操作の保存にチェックを入れて閉じます。操作に適切な名前を付けて保存しておきます。
 
この保存済みの操作をVBAで実行すればいいでしょう。詳細は下記をご参考に。
 
■T'sWare Access Tips #506 〜保存済みのインポート/エクスポートを再実行するには?〜
https://tsware.jp/tips/tips_506.htm

投稿日時: 21/08/19 22:54:17
投稿者: おーさん0729

hatena さんの引用:
引用:
      フィールド1(テキスト)
1レコード目 "あいう“えお”かき","111","","ああ"
2レコード目 "くけこ"さし"すせそ","222","","いい"
といった感じです。フィールド数は大半を割愛しています。

変に加工せずにCSVファイルそのままコピーして貼り付けてもらった方がいいです。
 
それを元に検証実験してみたいので。
 
下記のような感じでしょうか。
 
フィールド1,フィールド2,フィールド3,フィールド4
"あいう“えお”かき","111","","ああ"
"くけこ"さし"すせそ","222","","いい"

 
1行目はフィールド名
フィールドはカンマ区切り(,)
テキストフィールドは"区切り
という仕様なのかな。
 
CSVファイルといってもいろいろ仕様の違いがあるのでその辺をはっきりさせておかないと、正確の回答はできませんので。

 
 
csvファイルのいくつかのレコードをピックアップしました。
業務内容に関するため、文言は適当に変えています。
漢字をひらがなにしてたり、半角英数字を変えたりしてますが、文字数と"0"は変えていません。
 
@"1111","","いい","いいああああ(AAA無) いいいメール済5/27 いいりいいフォルダいい","","済み","","いいいいいい","-----","未だ","1111111","アアアアいい(1本)","","","","いいいいアアアアいい","-----","","","","いいい、その他","なし","-----","","名前","","11111","0","","0","","1000","","0","","","完了していません","1111","11","1111","","1111","","","?","?","?","","1","0","3","","1"
A"2222","","いい","","","済み","","いい","-----","未だ","2222222","                        ","","","","A/A AAAAA いあいいあいい","","","","","いい","済み","-----","","名前","","222","22","","2","","1000","","1","","","完了していません","","","2222","","2222","","","0","0",".045","","1","26.7857142857142857","5","","0"
B"3333","","いい","","","済み","","いい","名前","済み","3333333","いい いいアアアアア“AA333号”","","","","いい いいアアアアア“AA333号”","名前","","","","いい","済み","名前","","名前,名前","","33333","33333","","333","33.5","1100","24.9","84","","","終了しています","","","3333","3333","3333","3333","3333",".1157766990291262","2.356020942408377",".0491407766990291","95.4","1","86.0415205796731901","5","","0"
C"4444","","いい","","","済み","","いい","-----","未だ","4444444","(い)“AAA AAAA""","","","","(い)“AAA AAAA""","名前","","","","いい","なし","-----","","名前","","4444","444","","44","","4400","","4","","","完了していません","","","4444","","4444","4444","","0","0",".067","","1","47.9625550660792952","5","","0"
D"5555","","いい","5555555=アアアアアア゙ーアア","","済み","","いい","-----","済み","5555555","""いい""いいいい","","","","""いい""いいいい","名前","","","","いい","済み","-----","","","","55555","55555","","555","84.5","1100","0","103","","","終了しています","","","5555","","5555","5555","",".2308743169398907","3.544611770627963",".0651338797814208","84.5","1","72.8464476699770817","5","","0"
 
@ 4フィールド目の「 」=^K(文字コード13のキャリッジリターン)
A 12フィールド目は、タブ
B 12フィールド目に全角ダブルクオテーション
C 12フィールド目に全角ダブルクオテーションと半角ダブルクオテーションの混合
D 12フィールド目に半角ダブルクオテーション
 
一応、テキスト型に使用しているものです。
変数 = """" & Replace(Replace(Nz(テーブル.Fields(フィールド数)), """", """"""), Chr(13) & Chr(10), Chr(11)) & """"
 
よろしくお願いします。

回答
投稿日時: 21/08/20 18:04:59
投稿者: hatena
投稿者のウェブサイトに移動

提示のCSVはFileMakeから出力されたCSVということでしょうか。
下記のような手順で実験してみました。
 
提示のCSVをコピーしてエディターに張り付けて保存。(先頭の丸数字は削除)
下記のコードでAccessにインポート。
 
Docmd.TransferText acImportDelim, ,"test1","C:\TEST\test1.csv", False
 
正常にインポートできました。TAB も 全角のダブルクォーテーション も 半角のダブルクォーテーション も問題なしです。
 
下記のコードで上記でインポートしたテーブルをエクスポートしました。
 
Docmd.TransferText acExportDelim, ,"test1","C:\TEST\test3.csv", False
 
下記のように出力されました。
 

"1111",,"いい","いいああああ(AAA無)いいいメール済5/27いいりいいフォルダいい",,"済み",,"いいいいいい","-----","未だ","1111111","アアアアいい(1本)",,,,"いいいいアアアアいい","-----",,,,"いいい、その他","なし","-----",,"名前",,"11111","0",,"0",,"1000",,"0",,,"完了していません","1111","11","1111",,"1111",,,"?","?","?",,"1","0","3",,"1"
"2222",,"いい",,,"済み",,"いい","-----","未だ","2222222","	",,,,"A/A AAAAA いあいいあいい",,,,,"いい","済み","-----",,"名前",,"222","22",,"2",,"1000",,"1",,,"完了していません",,,"2222",,"2222",,,"0","0",".045",,"1","26.7857142857142857","5",,"0"
"3333",,"いい",,,"済み",,"いい","名前","済み","3333333","いい いいアアアアア“AA333号”",,,,"いい いいアアアアア“AA333号”","名前",,,,"いい","済み","名前",,"名前,名前",,"33333","33333",,"333","33.5","1100","24.9","84",,,"終了しています",,,"3333","3333","3333","3333","3333",".1157766990291262","2.356020942408377",".0491407766990291","95.4","1","86.0415205796731901","5",,"0"
"4444",,"いい",,,"済み",,"いい","-----","未だ","4444444","(い)“AAA AAAA""",,,,"(い)“AAA AAAA""","名前",,,,"いい","なし","-----",,"名前",,"4444","444",,"44",,"4400",,"4",,,"完了していません",,,"4444",,"4444","4444",,"0","0",".067",,"1","47.9625550660792952","5",,"0"
"5555",,"いい","5555555=アアアアアア゙ーアア",,"済み",,"いい","-----","済み","5555555","""いい""いいいい",,,,"""いい""いいいい","名前",,,,"いい","済み","-----",,,,"55555","55555",,"555","84.5","1100","0","103",,,"終了しています",,,"5555",,"5555","5555",,".2308743169398907","3.544611770627963",".0651338797814208","84.5","1","72.8464476699770817","5",,"0"

 
12フィールド目は元のCSVと同じです。
全角のダブルクォーテーションはそのまま。
半角のダブルクォーテーションは "" になりました。(元のCSVと同じです。)
 
ただし、空のフィールド(,"",)は(,,)となりました。
ここも元と同じにしたいなら、出力したCSVの '' を ,"", に置換するコードを追加すればいいでしょう。

投稿日時: 21/08/22 18:24:57
投稿者: おーさん0729

hatena さんの引用:
提示のCSVはFileMakeから出力されたCSVということでしょうか。
下記のような手順で実験してみました。
 
提示のCSVをコピーしてエディターに張り付けて保存。(先頭の丸数字は削除)
下記のコードでAccessにインポート。
 
Docmd.TransferText acImportDelim, ,"test1","C:\TEST\test1.csv", False
 
正常にインポートできました。TAB も 全角のダブルクォーテーション も 半角のダブルクォーテーション も問題なしです。
 
下記のコードで上記でインポートしたテーブルをエクスポートしました。
 
Docmd.TransferText acExportDelim, ,"test1","C:\TEST\test3.csv", False
 
下記のように出力されました。
 
"1111",,"いい","いいああああ(AAA無)いいいメール済5/27いいりいいフォルダいい",,"済み",,"いいいいいい","-----","未だ","1111111","アアアアいい(1本)",,,,"いいいいアアアアいい","-----",,,,"いいい、その他","なし","-----",,"名前",,"11111","0",,"0",,"1000",,"0",,,"完了していません","1111","11","1111",,"1111",,,"?","?","?",,"1","0","3",,"1"
"2222",,"いい",,,"済み",,"いい","-----","未だ","2222222","	",,,,"A/A AAAAA いあいいあいい",,,,,"いい","済み","-----",,"名前",,"222","22",,"2",,"1000",,"1",,,"完了していません",,,"2222",,"2222",,,"0","0",".045",,"1","26.7857142857142857","5",,"0"
"3333",,"いい",,,"済み",,"いい","名前","済み","3333333","いい いいアアアアア“AA333号”",,,,"いい いいアアアアア“AA333号”","名前",,,,"いい","済み","名前",,"名前,名前",,"33333","33333",,"333","33.5","1100","24.9","84",,,"終了しています",,,"3333","3333","3333","3333","3333",".1157766990291262","2.356020942408377",".0491407766990291","95.4","1","86.0415205796731901","5",,"0"
"4444",,"いい",,,"済み",,"いい","-----","未だ","4444444","(い)“AAA AAAA""",,,,"(い)“AAA AAAA""","名前",,,,"いい","なし","-----",,"名前",,"4444","444",,"44",,"4400",,"4",,,"完了していません",,,"4444",,"4444","4444",,"0","0",".067",,"1","47.9625550660792952","5",,"0"
"5555",,"いい","5555555=アアアアアア゙ーアア",,"済み",,"いい","-----","済み","5555555","""いい""いいいい",,,,"""いい""いいいい","名前",,,,"いい","済み","-----",,,,"55555","55555",,"555","84.5","1100","0","103",,,"終了しています",,,"5555",,"5555","5555",,".2308743169398907","3.544611770627963",".0651338797814208","84.5","1","72.8464476699770817","5",,"0"

 
12フィールド目は元のCSVと同じです。
全角のダブルクォーテーションはそのまま。
半角のダブルクォーテーションは "" になりました。(元のCSVと同じです。)
 
ただし、空のフィールド(,"",)は(,,)となりました。
ここも元と同じにしたいなら、出力したCSVの '' を ,"", に置換するコードを追加すればいいでしょう。

 
"を残すために色々してたのを見直します!
'' を ,"",の視点はなかったです。
ありがとうございます!

投稿日時: 21/08/24 18:41:48
投稿者: おーさん0729

色々な方々のおかげでなんとか同じcsvファイルの作成ができました。
 
ありがとうございました!