マクロでデータを分割してCSV
マクロ講座76回
データを分割してCSVで保存 Excel2013 マクロ講座 76回
大きなデータを分割コピーしてCSVで保存する
今回は、マクロ講座75c回からの続き的な内容です。
75回のコードを応用して、大きなデータを分割コピーしてCSVで保存するというマクロです。
コードも長くなってしまうのですが、前回から読み進めて来れば、大丈夫だと思います。
(サンプルファイルは、こちらから マクロ76回サンプルデータ)
手動でCSVを作成する場合
ExcelシートのデータをCSV形式のデータとして保存したい渇合は、[名前を付けて保存]コマンドを実行して、[ファイルの種類]を
CSV(カンマ区切り)」に選択してやればいいのです。
1枚だけのCSVファイルを作成するならそれでもいいのですが、複数シートとなると面倒です。
というのも、現在表示されているシートしか保存できず、作成したいCSVファイル数分だけ何度も繰り返す必要があり、そのたびに何度もアラートダイアログが表示されるからです。
1枚だけのCSVファイルを作成するならそれでもいいのですが、複数シートとなると面倒です。
というのも、現在表示されているシートしか保存できず、作成したいCSVファイル数分だけ何度も繰り返す必要があり、そのたびに何度もアラートダイアログが表示されるからです。
SaveAs メソッドを使ってCSV
マクロ講座75c回で登場した
SaveAs メソッドには、引数が非常に多かったですね。でもFileNameしか使いませんでした。
今度は2番めの引数 FileFormat これを使ってCSVにするんです。
引数のFileName,FileFormat,CreateBackup,この3つを使います。(MacならLocalも)
で ThisWorkbook.Path 内にある CSVフォルダ に ファイル名 で保存という指定になります。フォルダに入れる必要が無い場合は、
Filename:=ThisWorkbook.Path & ファイル名のように、フォルダ名を省いてください。 ThisWorkbookは、マクロが記録してあるブックのことを指します。
Wb.SaveAs Filename:=ThisWorkbook.Path & "\CSV\" & ファイル名, FileFormat:=xlCSV, CreateBackup:=FalseそしてCSVファイルを保存する場所なんですが、場所の指定も、FileNameに入れてしまうわけです。 Filename:=ThisWorkbook.Path & "\CSV\" & ファイル名
で ThisWorkbook.Path 内にある CSVフォルダ に ファイル名 で保存という指定になります。フォルダに入れる必要が無い場合は、
Filename:=ThisWorkbook.Path & ファイル名のように、フォルダ名を省いてください。 ThisWorkbookは、マクロが記録してあるブックのことを指します。
コードを最初から順に見てみましょう。
Const コピー行 = には、分割したい行数を入れます。例では100です。 Set 元シート = ActiveSheet 変数の元シートをActiveSheetにセットします。
Const コピー行 = には、分割したい行数を入れます。例では100です。 Set 元シート = ActiveSheet 変数の元シートをActiveSheetにセットします。
Sub データを分割してCSVで保存() Dim 元シート As Worksheet, Wb As Workbook, ファイル名 As String Dim 総行数 As Long, 回数 As Long, i As Long, 開始行 As Long Const コピー行 = 100 Set 元シート = ActiveSheet 総行数 = 元シート.UsedRange.Rows.Count - 1 回数 = Int(総行数 / コピー行) + IIf(総行数 Mod コピー行 > 0, 1, 0) 開始行 = 2
変数 Wb は、コピーしたデータを貼り付けるために作成した新規ブックとなります。
ファイル名はCSVファイルとして保存するときに使うファイル名のことで、最後に"まで.CSV"と拡張子をつけています。
Application.ScreenUpdating = False Application.DisplayAlerts = False For i = 1 To 回数 Set Wb = Workbooks.Add ファイル名 = "データ" & 開始行 - 1 & "~" & 開始行 + コピー行 - 2 & "まで.CSV"FileFormat:=xlCSV で、ブックをCSVで保存するという指定になります。
元シート.Rows(1).Copy Wb.Worksheets("Sheet1").Range("A1") 元シート.Rows(開始行 & ":" & 開始行 + コピー行 - 1).Copy Wb.Worksheets("Sheet1").Range("A2") Wb.SaveAs Filename:=ThisWorkbook.Path & "\CSV\" & ファイル名, FileFormat:=xlCSV, CreateBackup:=False Wb.Close Set Wb = Nothing 開始行 = 開始行 + コピー行 Next i Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
元になる分割したいデータシートを開き、マクロを実行すると、次の様になります。
あらかじめ作成しておいたCSVというフォルダに、マクロで作成されたCSVファイルが保存されています。
CSVファイルをメモ帳で開いたところです。
CSVファイルを作成する方法は、他にもあるので、追って紹介していきます。お疲れ様でした。