【초보자용】Excel VBA를 사용해 복수의 Excel 파일에의 동일 작업을 자동화해 보았다

이 기사를 읽고 할 수 있게 되는 것


  • 기초적인 처리를 대체로 망라하고 있으므로, 아래에 실은 코드를 읽으면서 공부하면 손을 움직이면서 VBA를 배울 수 있습니다.
  • 다양한 실험 데이터를 정리하는 자동화의 기초를 알 수 있습니다.

  • 환경



    Windows10
    Mac에서도 같은 자동화는 할 수 있지만, 디렉토리의 구조 등 패스의 취급 방법이 Windows와는 다르기 때문에 주의가 필요.

    전제하고 싶은 것



    「시험 데이터」폴더에 들어 있는 Excel 파일의 데이터를 전기해, 계산 결과를 정리한 시트를 「결과 정리」폴더에 새롭게 작성하고 싶다.

    시험 데이터가 들어있는 책에 새로 시트를 만들어 계산 결과도 거기에 자동으로 들어가게 하면 에! 라고 하는 의견도 있을지도 모르지만, 이번은 시험 데이터와 결과를 정리한 데이터는 독립시키고 싶다고 하는 생각이 있다고 전제.

    폴더의 구조는 다음과 같습니다.
    「결과 정리」폴더는 처음에는 비어 있고, 매크로를 실행하면 Excel 파일이 생성된다.



  • BookA : 매크로 실행용 File
  • 템플릿: 시험 데이터 전기, 계산 결과 정리용 템플릿

  • 시험 데이터/Book●: 실험 데이터 마스터

  • 코드



    실제로 짜낸 매크로는 이쪽
    파일의 경로는 각자의 PC를 보고 적절히 변경하는 것

    ※헤더등은 적당하게 넣고 있으므로 각 값을 구하는 실제의 계산식과는 다르다.
    Sub data_calc()
        '用いたい変数を定義
        Dim last_column As Long
        Dim data_amount As Long
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        '試験データと結果を入れるフォルダパス
        Const data_path As String = "C:\Users\user\Desktop\マクロ\抽出練習\試験データ\"
        Const result_path As String = "C:\Users\user\Desktop\マクロ\抽出練習\結果まとめ\"
        Dim data_fileName As String
        Dim result_fileName As String
        'data_pathに存在する、拡張子がxlsxのファイルをすべて取ってくる
        data_fileName = Dir(data_path & "*.xlsx")
        Dim fileNumber As Long
        fileNumber = 1
        Do While data_fileName <> ""
            FileCopy "C:\Users\user\Desktop\マクロ\抽出練習\テンプレート.xlsx", "C:\Users\user\Desktop\マクロ\抽出練習\結果まとめ\結果" & fileNumber & ".xlsx"
            result_fileName = "結果" & fileNumber & ".xlsx"
            '結果の中の話
            Workbooks.Open (result_path & result_fileName)
            'オブジェクトの代入はSetを用いる
            Set ws1 = Worksheets("計算結果")
            Set ws2 = Worksheets("コピー先")
            'データの中の話
            Workbooks.Open (data_path & data_fileName)
            data_amount = Range("A1").CurrentRegion.Rows.Count - 1
            Range("A2").Resize(data_amount, 4).Copy Destination:=ws2.Cells(2, 1)
            ActiveWorkbook.Close False
            'テーブルの最下行の行数
            last_column = ws2.Range("A1").CurrentRegion.Rows.Count
            '見出し行を除いたデータ数
            data_amount = last_column - 1
            Dim num As Long
            For num = 2 To last_column
                'データを用いてws1に計算する
                '容量の計算
                ws1.Range("A" & num) = ws2.Range("A" & num) * ws2.Range("B" & num)
                '電力の計算
                ws1.Range("B" & num) = ws2.Range("B" & num) * ws2.Range("C" & num)
            Next num
            data_fileName = Dir
            fileNumber = fileNumber + 1
            ActiveWorkbook.Close True
        Loop
    End Sub
    

    실행 결과



    「결과 정리」폴더에 시험 데이터의 파일 수분 결과를 정리한 시트를 작성할 수 있었다.






    마지막으로



    여기까지 읽어 주셔서 감사합니다.
    좀 더 이러한 좋다, 등 코멘트 등 있으면 기다리고 있습니다.
    이 기사가 뭔가 도움이되면 다행입니다.

    참고 텍스트
    할 수 있는 일러스트로 배운다 입사 1년째부터의 Excel VBA 할 수 있는 일러스트로 배운다 시리즈

    좋은 웹페이지 즐겨찾기