1

データを CSV ファイルに保存する方法について質問があります。最初のセルが空の単一の列を保存しようとしている場合にのみ発生します。列全体または隣接するセルのグループを選択できます。CSV ファイルに保存するとすぐに、先頭の空のセルがスキップされます。私はVBAサブの一部としてそれを行っていましたが、手動で行うと同じ結果が得られます。以下は、私が使用しているコードとテストデータです。

Sub CopyRange()
'Copy range: suppose B1 and B2 are empty, B3 to B10 are filled with anything
'e.g. with some numbers
  ActiveSheet.Range("B1:B10").Copy
'Create new workbook
  Workbooks.Add

'NOTE: I need to create a workbook with generic name, save the name and pass it 
'to another program - just to clarity why I don't do it all in one shot at .Copy
  csvPath = TEMP & "\" & ActiveWorkbook.Name & ".csv"

'Paste copied data to the newly created workbook
'NOTE: so far it keeps B1 and B2 empty
  ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Save the workbook as CSV
  ActiveWorkbook.SaveAs Filename:=csvPath, FileFormat:=xlCSV, _
    ReadOnlyRecommended:=False, CreateBackup:=False
'At this point the saved file moves all data 2 cells up 
'to fill the empty spaces in B1 and N2. That's the issue!
End Sub

興味深いことに、複数の列を選択すると、空のセルが保存され、正しい位置からデータが開始されます。

実際に問題を悪化させる xlPasteAll の代わりに xlPasteValues を使用してみました - PasteSpecial ステップで複数の列がある場合でも空のセルをスキップするようになりました。

また、xlCSVMSDOS、xlCSVWindows (どちらも「\r\n」行末文字を使用)、および xlCSVMac (「\n|」EOL 文字を使用) として保存しようとしました。何も機能しませんでした。

助けてください!

PS私もこのトレッドで説明されている方法を使用しようとしましたが、まだ運がありません.

4

1 に答える 1

2

CSVとして保存する場合、ExcelはシートにUsedRangeを使用しているようです。

範囲に書式設定を適用することで、UsedRange を人為的に拡張できます。たとえば、保存の前にこの行を追加すると、範囲全体が保存されます。

ActiveSheet.Range("A1:A10").Interior.ColorIndex = 7

したがって、コンテキストでそれを提供するだけで、サブの最後は次のようになります。

ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, _
 Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Apply some color to the range so that it all gets saved in the CSV.
ActiveSheet.Range("A1:A10").Interior.ColorIndex = 7
'Save the workbook as CSV
ActiveWorkbook.SaveAs Filename:=csvPath, FileFormat:=xlCSV, _
        ReadOnlyRecommended:=False, CreateBackup:=False
'Sheet gets saved as is with cell locations preserved.
End Sub
于 2013-01-25T20:08:37.117 に答える