CSVファイルの空の列の出力に一貫性がない(Microsoft Excel)
マークは、ExcelでCSVファイルを作成する際に奇妙なことに気づきました。ファイルは、出力データの各行の終わり方が常に一貫しているとは限りません。おそらく70フィールド(列)のデータを含むCSVファイルを作成し、テキストエディターでCSVファイルを表示すると、レコードにはすべてキャリッジリターンが含まれているが、場所が異なることに気付きました。一部のレコードには、空のフィールドを表すコンマの文字列があり、「正しい」場所で終了します。その他は、最後に入力された列の直後で終了します。いくつかのコンマがありますが、すべての空のフィールドには十分ではありません。マークは、なぜこれが発生するのか、CSVファイルに一貫した数の出力フィールドを含めるにはどうすればよいのか疑問に思いました。
この問題を回避する比較的簡単な方法の1つは、CSVとして保存する前に、完全に入力された「ダミー」フィールドをデータに含めることです。たとえば、テーブルに70列ある場合、セルA71にピリオドを入力します。このセルの内容を、テーブルにある行数だけ下にコピーします。次にワークシートをCSVにエクスポートすると、Excelにはダミーフィールドが含まれますが、さらに重要なことに、各レコードの最後のフィールドの前に適切な数のフィールド区切り文字(コンマ)が含まれます。
ダミーフィールドが必要ない場合は、次のように試すことができます:
。ヘッダー行のセルの1つを選択します。
。 Shift + Ctrl +8を押します。データテーブル全体が選択されます。
。 Ctrl + Hを押して、[検索と置換]ダイアログボックスの[置換]タブを表示します。 (図1を参照)
。 [検索する文字列]ボックスが完全に空であることを確認してください。
。 [置換]ボックスに1つのスペースを入力します。
。 [すべて置換]をクリックします。 Excelは、行われた置換の数を通知する必要があります。
これらの手順により、すべての空のセルが単一のスペースを含むセルに置き換えられます。その後、CSVにエクスポートすると、行ごとに適切な数のフィールドがエクスポートされます。
最後に、大きなテーブルを定期的にCSV形式にエクスポートする場合は、ファイルの作成を行うマクロを作成することをお勧めします。以下は、使用できるマクロのタイプの一例にすぎません。
Sub CreateCSV() Dim wkb As Workbook Dim wks As Worksheet Dim wksOri As Worksheet Dim iCols As Integer Dim lRow As Long Dim iCol As Integer Dim lRows As Long Dim sFilename As String Application.ScreenUpdating = False sFilename = "C:\test.csv" Set wksOri = ActiveSheet iCols = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Column lRows = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Row Set wkb = Workbooks.Add Set wks = wkb.Worksheets(1) For lRow = 1 To lRows For iCol = 1 To iCols With wks.Cells(lRow, 1) If iCol = 1 Then .Value = wksOri.Cells(lRow, iCol).Text Else .Value = .Value & "," & _ wksOri.Cells(lRow, iCol).Text End If End With Next Next Application.DisplayAlerts = False wkb.SaveAs FileName:=sFilename, _ FileFormat:=xlCSV wkb.Close Application.DisplayAlerts = True wksOri.Parent.Activate Application.ScreenUpdating = True MsgBox sFilename & " saved" Set wks = Nothing Set wkb = Nothing Set wksOri = Nothing End Sub
マクロは新しいワークブックを作成し、元のワークシートの情報をワークブックの最初のワークシートの列Aに「コンパイル」します。このデータには、元のフィールドのすべてのフィールドの区切り文字が含まれ、CSVファイルとして保存されます。最後に、一時ブックが削除されます。
CSVのパスとファイル名はコード(sFileName変数)にハードコードされていますが、必要に応じてコードがファイル名を要求するように変更することもできます。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(3068)は、Microsoft Excel 97、2000、2002、および2003に適用されます。