ExcelCSV-数値セル形式


86

レポートをCSVファイルとして作成します。Excelでファイルを開こうとすると、セルの内容に基づいてデータ型が推測され、それに応じて再フォーマットされます。

たとえば、CSVファイルにが含まれている場合

...,005,...

次に、Excelはそれを5として表示します。これをオーバーライドして005を表示する方法はありますか?

ユーザーがCSVファイルをダブルクリックして開くことができるように、ファイル自体に何かを実行したいと思います。

私はExcel2003を使用しています。


この問題のマクロソリューションについては、この質問を参照してください。
アダムジェンセン

今日、そこにはたくさんのExcel書き込みライブラリがあります。選択した言語で.xlsxファイルを作成するのは非常に簡単です。ユーザーが何らかの理由でまだExcel2003を使用している場合(この質問が最初に尋ねられたときは一般的ですが、今日はあまりありそうにないことを願っています)、. xlsを生成するオプションもいくつかあります。今日この質問に出くわした人々にとって、あなたはあなた自身を転がす必要がない可能性が非常に高いです。
ジョンY

回答:


129

.csvファイルを開くときにExcelが適用する書式を制御する簡単な方法はありません。ただし、以下にリストされているのは、役立つ可能性のある3つのアプローチです。

私の好みは最初のオプションです。

オプション1-ファイル内のデータを変更する

.csvファイルのデータを次のように変更できます...、=” 005”、...これはExcelで...、005、..として表示されます。

Excelはデータを数式として保持しますが、列をコピーして特殊な値を貼り付けると、数式は削除されますが、書式は保持されます。

オプション2–データをフォーマットする

それが単にフォーマットの問題であり、その列のすべてのデータが3桁の長さである場合。次に、Excelでデータを開き、データを含む列をこのカスタム形式000でフォーマットします。

オプション3–ファイル拡張子を.dif(データ交換形式)に変更します

ファイル拡張子を変更し、ファイルインポートウィザードを使用して形式を制御します。拡張子が.difのファイルは、ダブルクリックするとExcelによって自動的に開かれます。

ステップバイステップ:

  • ファイル拡張子を.csvから.difに変更します
  • ファイルをダブルクリックしてExcelで開きます。
  • 「ファイルインポートウィザード」が起動します。
  • 「ファイルタイプ」を「区切り」に設定し、「次へ」ボタンをクリックします。
  • [区切り文字]で、[カンマ]にチェックマークを付け、[次へ]ボタンをクリックします。
  • 表示されているデータの各列をクリックして、「列データ形式」を選択します。値が「005」の列は、「テキスト」としてフォーマットする必要があります。
  • 終了ボタンをクリックすると、ファイルが指定した形式でExcelによって開かれます。

8
.difが私のマシンで機能しませんでした。Excel 2007で手動で開くことが機能せず(ファイルの種類が拡張子と異なることを警告しました)、多くのコンピューターで.DIFがQuicktimeに関連付けられているようです。参考までに:)それ以外の場合は、すばらしいヒントです。
ニコラス

15
「正しく機能する」ファイルを生成する手間のかからない方法が必要な場合は、オプション1が最適だと思います。つまり、ユーザーのコンピューターで追加の作業を行わなくても、Excelで開くことができます。
キップ

私は同じ問題を抱えています、そして上記のどれも申し訳ありませんが適切ではありません。XMLとしてエクスポートし、XSLTを使用してCSVに移動する可能性があると考えています。別のアプリケーションにインポートできるように、CSVファイルが正しい必要があります
Matt

1
オプション1が常に適切であるとは限らないことに注意してください。たとえば、「1E02、どのテキストでも」というセルがあり、その前に等号を置くと、Excelは数式を入力したと想像します。最初に数式が間違っていますが、次に、最も重要なことに、テキストが2つのセルに分割されます。
ghiscoding 2014年

1
オプション1をありがとう。余分な作業なしで私の科学的記数法の問題を修正しました。
NaN 2014年

28

CSVを使用せず、SYLKを使用してください。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

これにより、書式設定をより細かく制御でき、Excelは内容を調べてフィールドの種類を推測しようとはしません。少し複雑に見えますが、非常に小さなサブセットを使用することで回避できます。


2
+1 SYLKへの書き込みは簡単に実装でき、初心者として行いました。
マットH

1
私はこのフォーマットについて知りませんでした。それは私が使用できるもののように見えます。これに+1!
Buggabill 2011

+ 1CSVからSYLKに切り替えるのに5分かかりました。これからのgoto出力フォーマット!
TheFish 2012年

@xamde、その通りです。RTFの場合のように、フォーマットを拡張してサポートすることがなかったのは不思議です。
Mark Ransom

WTF、またはウィキペディアから引用した「MicrosoftはSYLK仕様を公開していません」という推奨事項を教えてください。
sorin 2013年

14

これは、Microsoft Office 2010、Excelバージョン14で機能します

「ファイル自体に何かをする」というOPの設定を読み間違えました。インポートを直接フォーマットするソリューションが必要な人のために、これを保持しています

  1. 空の(新しい)ファイルを開きます([ファイル]-> [ブックから新規作成])
  2. インポートウィザードを開きます([データ]-> [テキストから])
  3. .csvファイルを選択してインポート
  4. ダイアログボックスで、[区切り]を選択し、[次へ]をクリックします。
  5. 区切り文字を選択し(「カンマ」以外のすべてのチェックを外します)、テキスト修飾子を選択し(おそらく{なし})、[次へ]をクリックします
  6. では、データのプレビューフィールドテキストにしたい列を選択します。強調表示する必要があります。
  7. 列のデータ・フォーマット・フィールド、「テキスト」を選択します。
  8. [完了]をクリックします。


2

範囲をテキストとしてフォーマットするだけです。

また、ここでの素敵な番号の形式上の記事とどのようにあなたがそれらをプログラムすることができますです。


これは、値の表示方法にのみ影響します。数式を使用するか、インポート中に、このスレッドで使用されている多くのメソッドの1つを使用してテキストに変換する必要があります
leo

2

実際、少なくともOffice 2003以降、ExcelスプレッドシートをXMLファイルとして保存できることを発見しました。したがって、XMLファイルを作成でき、それをダブルクリックすると、Excelで開きます。SYLKと同じレベルの制御を提供しますが、XML構文はより直感的です。


2

セルに改行しないスペースを追加すると役立つ場合があります。例えば: "firstvalue";"secondvalue";"005 ";"othervalue"

Excelにテキストとして処理させ、スペースは表示されません。Windowsでは、alt + 0160を入力することで、改行しないスペースを追加できます。詳細については、こちらをご覧ください:http//en.wikipedia.org/wiki/Non-breaking_space

Excel 2010で試してみました。これが、この問題の非常に適切な解決策をまだ探している人々に役立つことを願っています。


2

C#コードからCSVデータをエクスポートするときにこの問題が発生し、先頭のゼロデータにタブ文字\ tを付加することでこれを解決したため、Excelではデータが数値ではなくテキストとして解釈されました(ただし、他の文字を付加するのとは異なり、見られない)。

= "001"のアプローチが好きでしたが、これでは、インポートされたCSVファイルからこのフォーマットをすべて削除せずにエクスポートされたCSVデータをC#アプリケーションに再度インポートすることはできません(代わりに、インポートデータをトリミングします)。 。


1

ファイルをインポートするときに、列タイプを選択できると思います。数値ではなくテキストにします。でも、今のところチェックするコピーが目の前にありません。


1

csvをoleDBにロードし、推測されたすべてのデータ型を文字列に強制します

同じ質問をして、コードで答えました。

基本的に、csvファイルがロードされると、oledbドライバーは仮定を行い、どのような仮定を行うかを指示できます。

私のコードはすべてのデータ型を文字列に強制しますが...スキーマを変更するのは非常に簡単です。私の目的では、xsltを使用してtiを希望どおりに取得しましたが、さまざまなファイルを解析しています。


1

これは古い質問ですが、ここに記載されていない解決策があります。

csvを作成するときは、カンマの後、値の前にスペースを追加します, 005,

これはとにかくExcel2007で自動日付フォーマットを防ぐために働きました。


2
テストしたばかりですが、Excel2007と数値列では機能しないようです。:-/
ノーマンH

1

インポートするCSVファイルのセル内に改行がある場合、テキストインポートウィザードの方法は機能しません。このメソッドは、このシナリオを処理します(少なくともタブ区切りのデータを使用)。

  1. 新しいExcelファイルを作成する
  2. Ctrl + Aですべてのセルを選択
  3. [数値形式]コンボボックスで、[テキスト]を選択します
  4. タブ区切りファイルをテキストエディタで開く
  5. すべて選択し、コピーしてExcelに貼り付けます


1

これは私を一日中夢中にさせてきました(実際、CSVファイルを開く前にExcelの列タイプを制御することはできないため)、これはVB.NETとExcelの相互運用機能を使用して私にとってはうまくいきました:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

0

CSVを開くと、テキストインポートウィザードが表示されます。ウィザードの最後のステップで、特定の列をテキストとしてインポートできるようになります。これにより、「00」プレフィックスが保持されます。その後、セルを任意の方法でフォーマットできます。

Excel 2007で試してみましたが、動作しているように見えました。


1
Excel2003はウィザードをポップアップしません。
Sergey Stadnik

0

ええと、ExcelはCSVファイルのウィザードをポップアップすることはありません。名前を.txtに変更すると、次回[ファイル]> [Excelで開く]を実行したときにウィザードが表示されます。


0

フィールドの前に一重引用符を置きます。Excelは、数字のように見えても、テキストとして扱います。

...,`005,...

編集:これは間違っています。アポストロフィのトリックは、Excelに直接データを入力する場合にのみ機能します。CSVファイルで使用すると、フィールドにアポストロフィが表示されますが、これは不要です。

http://support.microsoft.com/kb/214233


4
これは人々が試みる可能性が高いものです。したがって、それが機能しないことを知ることは有用であり、時間を節約します。
AndyM 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.