2017-10-28 17 views
0

別のプログラムで生成したデータを含む複数の.csvファイルがあります。私はこれらのファイルのそれぞれを開き、そこからすべてのデータをコピーし、Excel上の既存のブックに貼り付けます。私の問題は、CSVファイルをExcelで開くと自動的にcsvテキストを3つ以上の列に分割するので、後でText to Columnsデータツールを使用してデータを変換できないということです。 Excelからの自動変換は、2つの異なる数字でいくつかの単一の値を分割します)。 csvファイルを開いたときにExcelを変更しないようにする方法はありますか?CSVファイルを開くときにCSVファイルの変更をExcelで防ぐ方法

+0

はあなたを行いますExcelがあなたのデータを破壊している理由を知っていますか?区切り文字として扱われるべきではない値そのものにデリミタ(例:コンマ)のインスタンスがありますか?または、Excelはデータを固定幅で分割していますか? CSVはプレーンテキストファイルなので、必要に応じて理論上はカスタムVBAコードで処理することができます。 – chillin

+0

公開ファイル共有サイトに問題を示すサンプルテストファイルをアップロードします。あなたが望むことを行うためにファイルを 'OPEN'するのではなく、' IMPORT'することができます。 –

答えて

0

テキストはcsvファイルで指定する必要があります。あなたは、例えば、引用符で自分の番号を入れてで先行し、等号で次の操作を行います。

="001145",="55666",="02133" 

これを行う最も簡単な方法はと、検索・置換するのを行うことであろう「=」、の終わりを置き換えます"Notepad ++のような高度なエディタを" \ r \ n = "で使用し、手動でファイルの開始と終了を行う必要があります。 Windowsエクスプローラからダブルクリックして直接ExcelにCSVを開いて2つのオプションのいずれかを考える

1

避けてください:任意のファイルなしにそれ自体で

マニュアルユーザーインターフェイス

オープンExcelプログラム。 を開いて、csvファイルを参照して選択します。その後、インポートプロセスウィザードを実行します。 1)区切り(固定ではない) - コンマの種類を選択してください。 2)ヘッダーは最初の行にあります。 3)IMPORTANTLY:各列をテキストタイプと定義しました。

コンマがテキスト文字列内に配置されている可能性があり、カンマ区切り文字と混同される可能性があるため、値を囲むために引用オプションをオフにしたい場合があります。したがって、自動ダブルクリックでは、Excelはカンマ区切りごとに複数の列を返しました。さらに、csvファイルを生成して、その中に潜在的なカンマを含む値を囲むようにソフトウェアを作成させてください。

自動VBAコード

インポートQueryTablesでいますが、特に設定することで、すべてのデータ型を保持するテキストにすべてのセルの書式を設定した後ExcelにCSV .NumberFormat@に:

Function ImportCSV() 
    Dim qt As QueryTable 

    csvfile = "C:\Path\To\CSV\File.csv" 

    ' FORMAT ALL CELLS AS TEXT 
    ActiveSheet.Cells.NumberFormat = "@" 

    ' ADD QUERYTABLE 
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & csvfile, _ 
     Destination:=Range("$A$1")) 
      .TextFileParseType = xlDelimited 
      .TextFileTextQualifier = xlTextQualifierDoubleQuote 
      .TextFileConsecutiveDelimiter = False 
      .TextFileTabDelimiter = True 
      .TextFileSemicolonDelimiter = False 
      .TextFileCommaDelimiter = True 
      .TextFileSpaceDelimiter = False 

      .Refresh BackgroundQuery:=False 
    End With 

    ' REMOVE QUERYTABLE 
    For Each qt In currwb.Sheets(2).QueryTables 
     qt.Delete 
    Next qt 

    Set qt = Nothing 
End Function 
関連する問題