VBAでcsvファイルのセットを作成しています。
私のスクリプトは必要なデータセットを作成していますが、ループの複数の反復で行数が異なります。たとえば、i = 2の場合は100,000行ですが、i=3の場合は22,000行です。問題は、Excelがこれらの個別のcsvファイルを保存するときに、最後のスペースが切り捨てられないことです。これにより、ファイルの最後に78,000の空白行が残ります。これは、それぞれ数メガバイトの大きさの約2,000のファイルを生成する必要があることを考えると問題です。(SQLで必要なデータがいくつかありますが、SQL自体で計算を行うことはできません。長い話です。)
この問題は通常、手動で保存するときに発生します。行を削除してからファイルを閉じてから再度開く必要があります。これは、VBAで自動的に発生するため、この場合はオプションではありません。別の言語のスクリプトを使用して保存した後に空白行を削除することは、実際にはオプションではありません。実際には、使用可能なドライブに収まる出力ファイルが必要であり、それらは今では不必要に巨大になっています。
試しSheets(1).Range("A2:F1000001").ClearContents
ましたが、何も切り捨てられません。Excelは、操作対象の右下のほとんどのセルを保存するため、ファイルの最後まですべての行を保存するため、行を削除しても、保存する前に同様に効果はありません。必要な行だけをExcelに保存させる方法はありますか?
保存に使用したコードは次のとおりです:(切り捨ては、これを呼び出すルーティングで以前に発生します)
Sub SaveCSV()
'Save the file as a CSV...
Dim OutputFile As Variant
Dim FilePath As Variant
OutputPath = ActiveWorkbook.Worksheets("Macro").Range("B2").Value
OutputFile = OutputPath & ActiveWorkbook.Worksheets("Macro").Range("B1").Value
Application.DisplayAlerts = False 'DISABLE ALERT on Save - overwrite, etc.
ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = True 'DISPLAY ALERTS
End Sub
関連するコードは次のとおりです。
'While looping through Al, inside of looping through A and B...
'Created output values needed in this case, in an array...
Sheets(1).Range("A2:E90001") = Output
ActiveWorkbook.Worksheets(1).Range("F2").Formula = "=(does not matter, some formula)"
ActiveWorkbook.Worksheets(1).Range("F2").AutoFill Destination:=Range("F2:F90001")
'Set Filename to save into...
ActiveWorkbook.Worksheets("Macro").Range("B1").Value = "Values_AP" & Format(A, "#") & "_BP" & Format(B, "#") & "_Al" & Format(Al, "#")
'Save Sheet and reset...
Call SaveCSV
Sheets(1).Range("A2:F90001").ClearContents
CurrRow = 1
Next Al