数字が数値。エクセルのバグ?

in

Excelでcsvファイルを取り込むには、OpenTextが便利なんだけど"数字"が数値になってしまうのがいただけない。これを回避する手段としてFieldInfoがあるわけなんですがこれがうまくいかないことがあります。例えば、

Workbooks.OpenText Filename:="c:¥abc.csv", StartRow:=1,
  DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
  Tab:=False, Semicolon:=False, Comma:=True, Space:=False,
  Other:=False,FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1))

こんなコードは間違いないはずなんですが、やっぱり"0001"は1になってしまう。色々、調べてみたけれど原因はわからず。まあ、めずらしくもないバグなんですが今日、ひょんなことから解決しました。

Workbooks.OpenText Filename:="c:¥abc.txt", StartRow:=1,
  DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
  Tab:=False, Semicolon:=False, Comma:=True, Space:=False,
  Other:=False,FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1))

先のコードとの違いはどこ?ちょっと気づかないでしょ。なんと、取り込むファイル名の拡張子を変更したらちゃんと"0001"になりました。なんだかなぁ。拡張子の関連付けなんかと関係があるのかもしれませんが(僕の環境ではcsvはエクセルに関連付けしていません)やっぱバグだよなぁ。くだらないことだけど解決してスッキリです。 (Excel2000環境です。)

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/237

Comments

あぁ、utaさんお久しぶり。

なるほど。これは考えもしなかった。何事も一元的な見方はいけませんね。うまくいかなければリセットして別の角度から考えてみることが大事だとわかりました。ありがとうございます。

あっちのほうは、ちょっと...ね。色々事情があって休止中なんです。スミマセン。

ご無沙汰してます、utaです。

With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\abc.csv", Destination:=Range("A1"))
    .AdjustColumnWidth = True
    .TextFilePlatform = 932
    
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    
    .TextFileCommaDelimiter = True
    .TextFileConsecutiveDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileTabDelimiter = False
    
    .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
    .Refresh BackgroundQuery:=False
End With

こんなんでCSVファイルでも上手くいくと思います。
ExcelのGUI操作でいえば、hipposさんのが「ファイル - ファイルを開く」、
これが「データ - 外部データの取り込み」にあたります。


Apple Store(Japan)