複数のエクセルを1つのエクセルに集計する方法

様々な人や、様々な組織から同じフォーマットのエクセルを提出してもらって、それを手で集計するのは、大変ですよね。特に公務員獣医師の方は、こういった作業は多いのではないでしょうか。また、大きな獣医師の組織を作っている方もこういった作業があるかと思います。

都道府県の支部から提出してもらったエクセルを集計するという想定で、VBAマクロを使って対処します。

前提

1つのフォルダに、集計をまとめるためのエクセルと、提出してもらったエクセルが入っています。エクセルの拡張子はxlsxでそろえて下さい。また、提出してもらったエクセルの名前は、組織の名前としてください。ここでは、都道府県支部から提出されたと想定して、以下のように名前をつけます。北海道、青森県、岩手県、宮城県、秋田県、山形県、福島県、茨城県、栃木県、群馬県、埼玉県、千葉県、東京都、神奈川県、新潟県、富山県、石川県、福井県、山梨県、長野県、岐阜県、静岡県、愛知県、三重県、滋賀県、京都府、大阪府、兵庫県、奈良県、和歌山県、鳥取県、島根県、岡山県、広島県、山口県、徳島県、香川県、愛媛県、高知県、福岡県、佐賀県、長崎県、熊本県、大分県、宮崎県、鹿児島県、沖縄県。

提出エクセル

提出してもらうエクセルは、ファイル名を組織名にします。そして、回答という名前のシートがあります。そこに、1列目に名前、2列目に回答内容が入っています。

集計エクセル

集計をまとめるためのエクセルには、回答集計という名前のシートがあります。そこに、1列目に提出してもらった組織の名前、2列目に名前、3列目に回答内容を記載するようにしたいです。もちろん自動でやりたい。

集計エクセルのVBAマクロ

集計をまとめるためのエクセルのほうを開き、visual basicエディターを開いて、以下のコードを貼り付けてください。そしてマクロを実行してください。シート名や組織名が異なる場合には、修正してください。修正しないとエラーがでます。

Sub 出席者()


Dim a, b, c, d, e, f, g, i, j As Long
Dim todofuken
Dim miteisyutu(46) As String 'ここの数字は、回答数ー1としてください。
Dim dashitenaiken As String

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With

Dim syukei As Workbook
Dim targetbook As Workbook

Set syukei = ThisWorkbook
    
For i = 1 To 47  '47は回答数を入れて下さい。
    
    syukei.Worksheets("回答集計").Activate
    
  '以下は、回答者を入れて下さい。
    If i = 1 Then
        todofuken = "北海道"
    ElseIf i = 2 Then
        todofuken = "青森県"
    ElseIf i = 3 Then
        todofuken = "岩手県"
    ElseIf i = 4 Then
        todofuken = "宮城県"
    ElseIf i = 5 Then
        todofuken = "秋田県"
    ElseIf i = 6 Then
        todofuken = "山形県"
    ElseIf i = 7 Then
        todofuken = "福島県"
    ElseIf i = 8 Then
        todofuken = "茨城県"
    ElseIf i = 9 Then
        todofuken = "栃木県"
    ElseIf i = 10 Then
        todofuken = "群馬県"
    ElseIf i = 11 Then
        todofuken = "埼玉県"
    ElseIf i = 12 Then
        todofuken = "千葉県"
    ElseIf i = 13 Then
        todofuken = "東京都"
    ElseIf i = 14 Then
        todofuken = "神奈川県"
    ElseIf i = 15 Then
        todofuken = "新潟県"
    ElseIf i = 16 Then
        todofuken = "富山県"
    ElseIf i = 17 Then
        todofuken = "石川県"
    ElseIf i = 18 Then
        todofuken = "福井県"
    ElseIf i = 19 Then
        todofuken = "山梨県"
    ElseIf i = 20 Then
        todofuken = "長野県"
    ElseIf i = 21 Then
        todofuken = "岐阜県"
    ElseIf i = 22 Then
        todofuken = "静岡県"
    ElseIf i = 23 Then
        todofuken = "愛知県"
    ElseIf i = 24 Then
        todofuken = "三重県"
    ElseIf i = 25 Then
        todofuken = "滋賀県"
    ElseIf i = 26 Then
        todofuken = "京都府"
    ElseIf i = 27 Then
        todofuken = "大阪府"
    ElseIf i = 28 Then
        todofuken = "兵庫県"
    ElseIf i = 29 Then
        todofuken = "奈良県"
    ElseIf i = 30 Then
        todofuken = "和歌山県"
    ElseIf i = 31 Then
        todofuken = "鳥取県"
    ElseIf i = 32 Then
        todofuken = "島根県"
    ElseIf i = 33 Then
        todofuken = "岡山県"
    ElseIf i = 34 Then
        todofuken = "広島県"
    ElseIf i = 35 Then
        todofuken = "山口県"
    ElseIf i = 36 Then
        todofuken = "徳島県"
    ElseIf i = 37 Then
        todofuken = "香川県"
    ElseIf i = 38 Then
        todofuken = "愛媛県"
    ElseIf i = 39 Then
        todofuken = "高知県"
    ElseIf i = 40 Then
        todofuken = "福岡県"
    ElseIf i = 41 Then
        todofuken = "佐賀県"
    ElseIf i = 42 Then
        todofuken = "長崎県"
    ElseIf i = 43 Then
        todofuken = "熊本県"
    ElseIf i = 44 Then
        todofuken = "大分県"
    ElseIf i = 45 Then
        todofuken = "宮崎県"
    ElseIf i = 46 Then
        todofuken = "鹿児島県"
    ElseIf i = 47 Then
        todofuken = "沖縄県"
    End If
    
      
    Dim 現在のパス, 目的ファイルのパス As String
    
    現在のパス = Replace(ThisWorkbook.Path, "\", "/")
    
    目的ファイルのパス = 現在のパス & "/" & todofuken & ".xlsx"
    
    
    If Dir(目的ファイルのパス) <> "" Then
           
        miteisyutu(i - 1) = ""
            
        Set targetbook = Workbooks.Open(目的ファイルのパス)
         
        With targetbook.Worksheets("回答")
      
             a = .Range("B5000").End(xlUp).Row
             
            .Activate
        
            .Range(Cells(2, 1), Cells(a, 2)).Copy '回答の形に合わせて調整してください
            
                
            ThisWorkbook.Worksheets("回答集計").Activate
             
            c = ThisWorkbook.Worksheets("回答集計").Range("B5000").End(xlUp).Row + 1
            
            ThisWorkbook.Worksheets("回答集計").Cells(c, 2).Select
            
            ActiveSheet.Paste
            
            ThisWorkbook.Worksheets("回答集計").Cells(c, 1).Value = todofuken
        
        End With
        
        Application.DisplayAlerts = False
        targetbook.Close
        Application.DisplayAlerts = True
        
    Else
        
    miteisyutu(i - 1) = todofuken
        
    End If
    
Next i


With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
End With

    
For j = 0 To UBound(miteisyutu)
    
    If miteisyutu(j) <> "" Then

    dashitenaiken = dashitenaiken & "," & miteisyutu(j)
    
    End If

Next
    
    MsgBox "未提出の県" & dashitenaiken

End Sub

Categories:

category