見出し画像

Excel VBAで、複数の特定範囲をCSVに保存するマクロ

会社で使用するために作成したものを、そのまま張り付けましたので
ファイル名や、場所は変更して使用してください。

1つの、シート内のデータを複数のcsvファイルに保存するのに便利です。
手作業でも可能ですが、数十件以上あり、さすがに面倒なので作成しました。

実行方法

・E1に「フォルダーパス」を入力する

・VBAエディタを起動します(Alt + F11キー)。

・「挿入」メニューから「モジュール」を選択して、新しいモジュールを作 成します。

・下記のコードをモジュールウィンドウに貼り付けます。

・マクロを実行します(Alt + F8キー、作成したマクロを選択して「実行」)。

Sub SaveRangesAsCSV()
    Dim wb As Workbook
    Dim sourceSheet As Worksheet
    Dim folderPath As String
    Dim filePath As String
    Dim csvFileName As String
    Dim arrFileNames As Variant
    Dim arrColumns As Variant
    Dim i As Integer
    
    ' 初期設定
    arrFileNames = Array("item.csv", "item-cat.csv", "data_add.csv", "S_マスタ_メイン.csv", "S_マスタ_価格情報.csv", "S_マスタ_車両情報.csv", "data_spy.csv", "quantity.csv", "S_マスタ_楽天.csv", "S_マスタ_ヤフー.csv", "S_マスタ_サイズ情報.csv", "S_マスタ_商品情報.csv", "normal-item.csv")
    arrColumns = Array("E:AF", "AM:AT", "BA:CT", "CZ:DB", "DG:DO", "DS:DW", "EA:ET", "EZ:FB", "FH:FI", "FL:FN", "FR:FS", "FV:FW", "GB:UX")
    
    ' フォルダーパスをE1セルから取得
    folderPath = ThisWorkbook.Sheets(1).Range("E1").Value
    
    ' 対象のワークブックとシートを設定
    Set wb = Workbooks.Open(folderPath & "\元.xlsx")
    Set sourceSheet = wb.Sheets(1)
    
    ' 各ファイル名と範囲に対してループ
    For i = LBound(arrFileNames) To UBound(arrFileNames)
        csvFileName = folderPath & "\" & arrFileNames(i)
        ' SaveRangeAsCSVを呼び出す
        SaveRangeAsCSV sourceSheet, arrColumns(i), csvFileName
    Next i
    
    wb.Close False ' ワークブックを保存せずに閉じる
End Sub

Sub SaveRangeAsCSV(sourceSheet As Worksheet, ByVal colRange As String, csvFileName As String)
    Dim rng As Range
    Dim csvWorkbook As Workbook
    Dim csvSheet As Worksheet
    
    ' 対象範囲を選択
    Set rng = sourceSheet.Range(colRange)
    
    ' 新しいワークブックを作成し、範囲をコピー
    Set csvWorkbook = Workbooks.Add
    With csvWorkbook
        Set csvSheet = .Sheets(1)
        rng.Copy
        
        ' 新しいシートのA1セルに貼り付け
        csvSheet.Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        
        ' CSVとして保存
        .SaveAs Filename:=csvFileName, FileFormat:=xlCSV
        
        ' 新しいワークブックを閉じる
        .Close False
    End With
End Sub

この記事が参加している募集

仕事について話そう

この記事が気に入ったらサポートをしてみませんか?