本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
Access CSVインポートする機能があります。この時に、文字列として認識して欲しいのに勝手に数値として判定され、表示が変わってしまう事があります。
DoCmd.TransferText
VBA DoCmd.TransferTextを利用する、もしくはAccessのウィザードを利用するなどして取り込む場合です。表示が変わる時と変わらない時があるのが不思議でした。
ちゃんと取り込める時は取り込めるのです。何ででしょう。
ダブルクォーテーションの有無
原因は、CSVのフィールドごとにダブルクォーテーションがあるかないかです。
aaa,bbb,532E0003,ccc
なのか
“aaa”,”bbb”,”532E003″,”ccc”
なのかの違いです。
指数表示って何?
上記 [532E003]は、CSVインポート時
5.32E+05
となります。E+というのは指数表示。上記だと10の5乗を表しています。CSVでインポートする時、ダブルクォーテーションなしだと、勝手にAccessが指数表示と判定して取り込んじゃうんですね。
対処
1.CSV吐き出しアプリでダブルクォーテーションをつける
CSV吐き出しアプリケーション側で、ダブルクォーテーションも合わせてつける設定で吐き出します。こうすればインポート側では困りません。
2.CSVインポート前にダブルクォーテーションをつける
CSV吐き出しアプリにダブルクォーテーションをつける機能がない場合。CSVインポート前にダブルクォーテーションをつける動作をしてやれば良い事になります。
この方のサイトがとっても参考になります。
上記サイトの引用です。
Set objCsv = WScript.Arguments Set objFileSys = WScript.CreateObject("Scripting.FileSystemObject") Set objTxt = objFileSys.OpenTextFile(objCsv(0),1) Set objFolder = objFileSys.OpenTextFile(objFileSys.GetParentFolderName(objCsv(0)) & "\" & objFileSys.GetBaseName(objCsv(0)) & "_ダブルクォーテーション付.csv",2,True) Do Until objTxt.AtEndOfStream csvIn = objTxt.ReadLine objFolder.WriteLine """" & Replace(csvIn,",",""",""",1,-1,1) & """" Loop