【Excel VBA】配列の要素数だけファイルを作成する方法を紹介【Workbooks Add】

Excel
スポンサーリンク

今回は配列の要素数だけファイルを作成する方法を紹介したいと思います。

仕事だったりで割とよく使っているので、是非参考にしていただければと思います。

また、配列については過去にも紹介していますので、こちらも併せてご覧ください!

スポンサーリンク

配列の要素数だけファイルを作成する方法

コードの紹介

早速コードを紹介したいと思います。実際にコピペして実行してみてください。

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\東北地方」に保存してみます。

配列の要素数だけファイルを作成する方法_コードの紹介_1

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

配列の要素数だけファイルを作成する方法_コードの紹介_2

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

配列の要素数だけファイルを作成する方法_コードの紹介_3

コードのポイント

ざっくりコードと動作の説明をしたところで、それぞれコードのポイントを紹介したいと思います。

配列を定義する

以下のコードで処理する配列を定義しています。今回は東北地方の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

処理の流れは以下のようなイメージです。

  1. haribona_AddBookからgetfolderpathファンクションを呼び出し
  2. getfolderpathファンクションで保存先フォルダパスを取得
  3. 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

処理の流れは以下のようなイメージです。

  1. Application.DisplayAlertsで確認画面の表示(True),非表示(False)を設定
  2. Workbooks.Addで新しいブックを追加
  3. SaveAsで選択したフォルダにファイルを保存し、Closeで保存したファイルを閉じる

ポイントはWorkbooks.Addで追加したブックの扱いで、新しく追加したブックがアクティブなブックになります。これを利用することで、ActiveWorkbook.SaveAsやCloseで新しく追加したブックを保存,Closeすることが出来るわけです。

因みにUBound(Tohoku)から1を引いている理由は、配列Tohokuは要素が0~5までになっており、1を引かないと存在しない要素番号(6)までFor文が実行されてしまうからです

今回の例だと配列の値をそのままファイル名にしている為、要素番号6を参照しても配列には何も入っていない為、SaveAsを実行するとエラーになってしまいます。

コードのポイント_ファイルを作成,保存する_1

SaveAsについては過去に紹介していますので、こちらも併せてご覧ください!

スポンサーリンク

まとめ

今回は配列の要素数だけファイルを作成する方法を紹介しました。

マクロで新しいファイルを作成するときは、

  • Workbooks.Addで新しいブックが開く。
  • Workbooks.Addで追加したブックがアクティブ状態になる。
  • For文が配列の要素数を越えないように調整する

上記3点に注意しましょう。

コメント

タイトルとURLをコピーしました