Access CSVインポートで指数表示になってしまう

Access CSVインポートする機能があります。この時に、文字列として認識して欲しいのに勝手に数値として判定され、表示が変わってしまう事があります。

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