web-dev-qa-db-ja.com

Excelシート(の一部)の範囲をVBAを使用してCSVにエクスポート

私はcsvへのエクスポートが約10億回要求されたことを知っています、そして私はかなり何度もそれをしました、しかし私は各行またはセルを循環することなくシートの一部だけをcsvにエクスポートする方法を理解しようとしていますそしてそれらをファイルに個別に印刷します。 1つの要件として、ローカルのフォーマットを維持する必要があります。

Sheets("PI_OUTPUT").Copy

これにより、シート全体、いぼなどすべてがコピーされます。行1〜20000、列A〜Xに数式がありますが、データが処理された後、空白行の量が変化します。 copyメソッドを使用すると、すべての空の行がコピーされ、コンマの行として出力されます。 、、、、、、、など...

コピー後、activesheet.deleterowsを使用して出力ファイルをトリミングしようとしましたが、エラーが発生しました。

私は使ってみました:

Worksheets("PI_OUTPUT").Activate
Sheets("PI_OUTPUT").Range("A2:X5000").Copy

私は別の提案を使用しようとしました:sp​​ecialcells(xlCellTypeVisible)、しかし私はそれを機能させることができないようです:

Set rng = Sheets("PI_OUTPUT").SpecialCells(xlCellTypeVisible)
Set Workbook = Workbooks.Add
With Workbook
    Call rng.Copy
    .Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
    .SaveAs filename:=MyPath & MyFileName, FileFormat:=xlCSV
    .Close
End With

さらに悪いことに、列数、行数が可変で、すべて別のファイルに保存されている複数のシートで実行する必要があるため、何度でも繰り返すことができるものを探しています。場所を選択するためのフォルダパスポップアップがあり、動的に作成されたファイル名を持っていますが、コピー/貼り付けはファイルを回避します。

現在数え切れないほどのグーグル検索の後に私が持っていた小さな髪を引き裂いて、どんな助けもありがたく受けました。

以下のコードを使用できます。

Sub testexport() 
 'Adpated from OzGrid;
 ' export Macro as CSV

Dim wsh As Worksheet

Set wsh = ThisWorkbook.Worksheets("PI_OUTPUT")

With wsh.Range("A2:X20000")

.AutoFilter 1, "<>" 'Filter to get only non-blank cells

'assuming there is no blank cell within a filled row:
wsh.Range(wsh.Cells(2, 1), wsh.Cells(24, 2).End(xlDown)).Copy 'copy non-blank cells 

'.AutoFilter should not cancel autofilter as it clears cutcopy mode

End With

Application.DisplayAlerts = False 'avoid from "save Prompt window"

Workbooks.Add

ActiveSheet.Paste 

'Saves to C drive as Book2.csv
ActiveSheet.SaveAs Filename:= _ 
"C:\Book2.csv" _ 
, FileFormat:=xlCSV, CreateBackup:=False 

ActiveWorkbook.Close 

wsh.Range("A2:X20000").AutoFilter 'clear the filter

Application.DisplayAlerts = True 'set to default

End Sub 
8
M--