今回は配列の要素数だけファイルを作成する方法を紹介したいと思います。
仕事だったりで割とよく使っているので、是非参考にしていただければと思います。
また、配列については過去にも紹介していますので、こちらも併せてご覧ください!
配列の要素数だけファイルを作成する方法
コードの紹介
早速コードを紹介したいと思います。実際にコピペして実行してみてください。
Sub haribona_AddBook()
Dim targetfolder As String
Dim Tohoku() As String
Dim i As Long
Application.ScreenUpdating = False
ReDim Tohoku(6)
Tohoku(0) = "青森県"
Tohoku(1) = "秋田県"
Tohoku(2) = "岩手県"
Tohoku(3) = "山形県"
Tohoku(4) = "宮城県"
Tohoku(5) = "福島県"
targetfolder = getfolderpath
If targetfolder = "" Then
MsgBox "フォルダが選択されていません。" & vbCrLf & _
"処理を終了します。"
Exit Sub
End If
Application.DisplayAlerts = False
For i = 0 To UBound(Tohoku) - 1
Workbooks.Add
ActiveWorkbook.SaveAs targetfolder & "\" & Tohoku(i) & ".csv"
ActiveWorkbook.Close
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Function getfolderpath() As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
getfolderpath = .SelectedItems(1)
End If
End With
End Function
実行すると「CSVを保存するフォルダを選択してください。」というダイアログが開くので、CSVを保存したいフォルダを選択します。
今回は「C:\test_haribona\東北地方」に保存してみます。

選択後「OK」を押すと、配列の数だけCSVファイルが作成&保存されます。

ちなみに、ダイアログが表示された後に「キャンセル」や右上の×を押すと以下のメッセージボックスが表示され、何もせずに処理が終了します。

コードのポイント
ざっくりコードと動作の説明をしたところで、それぞれコードのポイントを紹介したいと思います。
配列を定義する
以下のコードで処理する配列を定義しています。今回は東北地方の6県を指定しましたが、お好きに設定いただいて結構です。
ReDim Tohoku(6)
Tohoku(0) = "青森県"
Tohoku(1) = "秋田県"
Tohoku(2) = "岩手県"
Tohoku(3) = "山形県"
Tohoku(4) = "宮城県"
Tohoku(5) = "福島県"
保存先フォルダを選択する
以下のコードで保存先のフォルダを設定しています。
targetfolder = getfolderpath
If targetfolder = "" Then
MsgBox "フォルダが選択されていません。" & vbCrLf & _
"処理を終了します。"
Exit Sub
End If
~
Function getfolderpath() As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "CSVを保存するフォルダを選択してください。"
If .Show = True Then
getfolderpath = .SelectedItems(1)
End If
End With
End Function
処理の流れは以下のようなイメージです。
- haribona_AddBookからgetfolderpathファンクションを呼び出し
- getfolderpathファンクションで保存先フォルダパスを取得
- targetfolderに保存先フォルダパスを格納
保存先フォルダパスを取得する為にgetfolderpath()というFunctionを定義し、
Sub haribona_AddBook()
~
targetfolder = getfolderpath
~
Application.FileDialog(msoFileDialogFolderPicker).Showを使ってダイアログを開いています。
Function getfolderpath() As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "CSVを保存するフォルダを選択してください。"
If .Show = True Then
getfolderpath = .SelectedItems(1)
End If
End With
End Function
フォルダを選択して「OK」を押すとgetfolderpathに選択したフォルダのパス(.SelectedItems(1))が格納され、変数targetfolderにフォルダのパスが格納されます。
ちなみにブレークポイントを設定すれば分かりますが、ダイアログが表示された後に「キャンセル」や右上の×を押すと、getfolderpath = .SelectedItems(1)の部分は処理されません。
ファイルを作成,保存する
以下のコードでファイルを作成,保存しています。
Application.DisplayAlerts = False
For i = 0 To UBound(Tohoku) - 1
Workbooks.Add
ActiveWorkbook.SaveAs targetfolder & "\" & Tohoku(i) & ".csv"
ActiveWorkbook.Close
Next i
Application.DisplayAlerts = True
処理の流れは以下のようなイメージです。
- Application.DisplayAlertsで確認画面の表示(True),非表示(False)を設定
- Workbooks.Addで新しいブックを追加
- SaveAsで選択したフォルダにファイルを保存し、Closeで保存したファイルを閉じる
ポイントはWorkbooks.Addで追加したブックの扱いで、新しく追加したブックがアクティブなブックになります。これを利用することで、ActiveWorkbook.SaveAsやCloseで新しく追加したブックを保存,Closeすることが出来るわけです。
因みにUBound(Tohoku)から1を引いている理由は、配列Tohokuは要素が0~5までになっており、1を引かないと存在しない要素番号(6)までFor文が実行されてしまうからです。
今回の例だと配列の値をそのままファイル名にしている為、要素番号6を参照しても配列には何も入っていない為、SaveAsを実行するとエラーになってしまいます。

SaveAsについては過去に紹介していますので、こちらも併せてご覧ください!
まとめ
今回は配列の要素数だけファイルを作成する方法を紹介しました。
マクロで新しいファイルを作成するときは、
- Workbooks.Addで新しいブックが開く。
- Workbooks.Addで追加したブックがアクティブ状態になる。
- For文が配列の要素数を越えないように調整する
上記3点に注意しましょう。
コメント