マークは、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に適用されます。