2016-12-06 5 views
0

私にはfile.csvがあります。ダブルクリックで開くと、適切な設定でExcelで開きます(セミコロンがなく、データの各行が適切な列に正しく表示されています)。VBAのワークシートとしてCSVを開く - 不正な構文解析

例の結果:

enter image description here

しかし、VBAに:(私はすべての私の試みを保ち開始する前に、他の数)

'Workbooks.OpenText Filename:=f, StartRow:=2, DataType:=xlDelimited, Semicolon:=True, ConsecutiveDelimiter:=True, TextQualifier:=xlTextQualifierNone 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Semicolon:=True 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited 
'Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=Chr(34) 
'Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=";" 
Workbooks.Open Filename:=f, Format:=xlDelimited 
Dim s As String 
s = """" & ";" & """" 
Workbooks.Open Filename:=f, Format:=xlDelimited, Delimiter:=s 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, OtherChar:=s 
'Workbooks.OpenText Filename:=f, DataType:=xlDelimited, OtherChar:=";" 

私は上記の行を試みたとして、まったく引数がなくても、私が何をしていても、ファイルをダブルクリックするとテキストが分割されずに開きます。

例の結果:要約中のSO

enter image description here

。ファイルをダブルクリックすると、ファイルが正しく解析されます。OpenおよびOpenTextは正しく解析されません。驚くべきことに、ワークシートはOpenまたはOpenTextを使用するかどうかにかかわらず同一に見えます。

this questionにも同様の問題が記載されていますが、適切な回答はありません。私たちの場合の違いは、Excelが何かを私のためにと解析しないことです。OPのファイルの大部分を解析するようです。

ブックを開いて、列の1つを繰り返して、閉じます。私はいくつかの回避策を念頭に置いているので、不必要に迂回して解決することができます。

これまでのところ私はこれらのアイデアを発見した:

  1. .txt.csvの名前を変更し、OpenTextを使用してLEFT/MIDを使用して表示されるようborkedファイル上QueryTableインポート
  2. 反復処理を使用してOpenText
  3. を使用して/ RIGHTで所望のカラムに到達する。
  4. バイナリOpenおよび0配列に各行

理想の答え:Workbooks.OpenTextまたは類似のネイティブ関数を使用してこのソリューションを実現する方法

  1. Workbooks.OpenTextについての説明やそれに似た最も適切なネイティブ関数が、Excel自体がそれに対応していると思われる結果を達成できない理由についての説明
  2. その他の回避策。

答えて

1

おかげでそれを飾ることができます試してみるほどスマートだった彼らは ".csv拡張機能に特別な意味を割り当てる"と言った。

ローカライゼーションは、.csvコンテキストのこの「特別な意味」に影響します。私はExcelのローカライズ版を使用しており、Local:=Trueを設定すると、;を区切り文字として指定しなくても、OpenOpenTextの両方でファイルを正しく解析できます。

3

あなただけのレコードを解析するVBAを使用して、ファイルをインポートするVBAを使用しようとしている場合:

Sub ImportFile() 
    Dim j As Long, k As Long 
    Close #1 
    Open "C:\TestFolder\whatever.csv" For Input As #1 
    j = 1 
    Do While Not EOF(1) 
      Line Input #1, TextLine 
      ary = Split(TextLine, ";") 
      k = 1 
      For Each a In ary 
       Cells(k, j) = a 
       k = k + 1 
      Next a 
      j = j + 1 
    Loop 
    Close #1 
End Sub 

は、この方法が.CSV拡張子に特別な意味を割り当てるからVBAを停止し、それをやって。

コアコードは、あなたの満足に努めていたら、うっかり私がいなかった一つの属性へと私を傾けるためなど、二重引用符のカプセル化などの他の機能と@GarysStudentへ

関連する問題