ファイルを結合する方法【Excel・VBA】

本投稿ではエクセルでファイルを結合するマクロのご紹介します。

ファイルを結合するマクロの使用目的

みなさん、仕事や学校で大量のエクセルファイルをもらうことがあるかと思います。

たくさんのエクセルファイルに分かれていると、一つ一つ見るたびにエクセルファイルを開く必要があり大変です。特に実験データなどの一つ一つのファイルのデータ点数が多いものは開くだけでも大変です。

便利に扱うためにファイル一つにまとめたことがある人もいるでしょう。ファイルの量が少ない場合にはそれでも良いかもしれませんが、多い場合には大変時間のかかる作業になります。

今回ご紹介するのは、フォーマットが決まっているファイルを一つのファイルのシートに結合していくマクロになります。マクロの使用で作業効率が向上します。

フォーマットが決まっているファイルとしては、自由記入式のアンケートなどや実験結果などを想定しています。

画像に alt 属性が指定されていません。ファイル名: image-3.png
画像に alt 属性が指定されていません。ファイル名: image-4.png

VBAコード紹介

今回紹介するコードはEX-ITさんのコードに少し追加しただけのものになります。そのため、詳細説明はEX-ITさんのページを参照してください。もし、コード削除の依頼があれば差分だけ紹介します。

Sub folder()

    If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
        Range("b2").Value = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
    End If

End Sub

Sub merge()


'シート[merge]を削除
    On Error Resume Next
    Application.DisplayAlerts = False
       Worksheets("merge").Delete
    Application.DisplayAlerts = True
    
'シート[merge]を一番右に追加
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
    
'フォルダの場所を変数に入れる
    Dim Folder_path
    Folder_path = ThisWorkbook.Worksheets("folder").Range("b2").Value
    
  
'結合するブックを変数に入れる
    Dim FileType
    If Worksheets("folder").Range("b1").Value = "Excel" Then
        FileType = "\*.xls*"
    Else
        FileType = "\*.csv"
    End If
    
    
    Dim MergeWorkbook
    MergeWorkbook = Dir(Folder_path & FileType)
    
'削除用追記1
    Dim hoge
    hoge = 0

    
'指定したフォルダから、ファイルを探して、開いてコピペ
    Do Until MergeWorkbook = ""
        Workbooks.Open Filename:=Folder_path & "\" & MergeWorkbook
        
    
        Dim MergeWorkbook_data  '結合するブック内のシートのデータ数
        Dim ThisWorkbook_data  '結合先のシートのデータ数
        
        
        Dim i
        For i = 1 To Workbooks(MergeWorkbook).Worksheets.Count
        
            MergeWorkbook_data = Workbooks(MergeWorkbook).Worksheets(i).Range("a" & Rows.Count).End(xlUp).Row
            ThisWorkbook_data = ThisWorkbook.Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row
            
            Workbooks(MergeWorkbook).Worksheets(i).Rows("1:" & MergeWorkbook_data).Copy ThisWorkbook.Worksheets("merge").Range("a" & ThisWorkbook_data + 1)
            
            '削除用追記2
            hoge = hoge + 1
            If hoge > 1 Then
            ThisWorkbook.Worksheets("merge").Range(ThisWorkbook_data + 1 & ":" & ThisWorkbook_data + 5).Delete
            End If
        Next
    
           
    '結合するブックを閉じる
        Application.DisplayAlerts = False
            Workbooks(MergeWorkbook).Close
        Application.DisplayAlerts = True
    
'次のブックを探しに行く
        MergeWorkbook = Dir()
    Loop
   

End Sub

元のコードだと、”研修についてのアンケート”、”悪かった点”、”改善案”という部分も含めて一つのセルにまとまってしまうので、緑色の部分を追記しました。グラフ作成時に文字データが入ってしまうと、グラフ表示がおかしくなるからです。

mergeの赤色の部分でファイル先頭の不要部分の行数を指定します。上の研修アンケートの例だと、先頭の1~5行目は最初の一回以外は不要ですよね。

使用手順は以下のようになります。
folderというマクロとmergeというマクロの2個を利用します。
①結合したいファイルを一つのフォルダにまとめて保存してください。
②不要な先頭行数をコードの赤色部分に入力。
②ファイル結合用bookを作成し、”folder”という名前のシートを作成。
③”folder”シートのb2セルにfolderマクロあるいは手入力で結合元ファイルを保存したフォルダのディレクトリ入力。
④mergeマクロ実行。
⑤”merge”シートが作成され、複数ファイルが結合されたシートが作成される。

もし、結合する順番にこだわりがあるのならば、結合元ファイルの名称が順番になるように、頭に数字を入れるなどの工夫してください。

おわりに

今回はファイルを結合するマクロを紹介しました。職場や学校などのPCの性能が悪い人ほど今回のコードで作業効率向上が期待できます。

VBAは大学で習わない場合の方が多いので、抵抗のある人が多いと思いますが、意外と簡単なので使ってみてはどうでしょうか。

コメント

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