複数のExcelファイルを1つにまとめる方法【Python/VBA/Power Query】

Pythonで複数のExcelファイルを1つのブックにまとめる方法

目次

はじめに

Excelファイルを扱う業務で、複数のファイルを1つのブックにまとめたいことはよくあります。今回は、10個のExcelファイルを1つのブックの個別シートとしてまとめる方法を解説します。手動でも可能ですが、Pythonを使えばより効率的に処理できます。

環境設定

  • Windows 10/11
  • Python 3.10以上
  • 必要なライブラリ:pandas, openpyxl

準備するファイル

本記事では、初心者の方でも実践的に学習できるように、サンプルファイルをご用意しました。実際の株式市場データを模したテストデータとなっています。

ダウンロードとセットアップ

  1. サンプルファイルをダウンロー(10個のExcelファイル:約4MB)
  2. ダウンロードしたZIPファイルを解凍
  3. 解凍したファイルをC:\test\フォルダに配置

C:\test\フォルダが存在しない場合は、新しく作成してください。

ファイル構成

C:\test\
    ├── 20240408.xlsx
    ├── 20240409.xlsx
    ├── 20240410.xlsx
    ├── 20240411.xlsx
    ├── 20240412.xlsx
    ├── 20240415.xlsx
    ├── 20240416.xlsx
    ├── 20240417.xlsx
    ├── 20240418.xlsx
    └── 20240419.xlsx

ファイルの内容

各Excelファイルには、以下のような実際の株式市場データが含まれています:

  • コード(A列):証券コード(4桁の数字)
  • 現在日付(B列):取引日(YYYY/MM/DD形式)
  • 現在値時刻(C列):データ取得時刻(HH:MM:SS形式)
  • 銘柄名称(D列):会社名
  • 現在値(E列):株価
  • 出来高(F列):取引量
  • 売買代金(G列):取引金額
  • 時価総額(H列):企業価値
  • 逆日歩(I列):信用取引指標
  • 信用倍率(J列):信用取引指標
  • 貸借倍率(K列):信用取引指標
  • 権利落日(L列):権利確定日
  • 決算発表日(M列):業績発表日
  • PER(N列):株価収益率
  • PBR(O列):株価純資産倍率

Pythonスクリプトの作成

以下のコードをmerge_excel.pyとして保存します:

import pandas as pd
import os

# フォルダパスを設定
folder_path = r"C:\test"
output_file = r"C:\test\combined_files.xlsx"

# ExcelWriterを作成
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
    # フォルダ内のExcelファイルを処理
    for filename in os.listdir(folder_path):
        if filename.endswith('.xlsx') and filename != 'combined_files.xlsx':
            # ファイルのフルパス
            file_path = os.path.join(folder_path, filename)
            
            # ファイルを読み込む
            df = pd.read_excel(file_path)
            
            # シート名として使用するファイル名(拡張子なし)
            sheet_name = filename.replace('.xlsx', '')
            
            # シートとして保存
            df.to_excel(writer, sheet_name=sheet_name, index=False)
            print(f"処理完了: {filename}")

print("全ての処理が完了しました")

つまずきやすいポイントと解決方法

1. モジュールが見つからないエラー

エラーが発生しました: No module named 'xlsxwriter'

このエラーが発生した場合は、必要なライブラリがインストールされていません。以下のコマンドでインストールしましょう:

pip install pandas openpyxl

2. VSCodeでの仮想環境推奨エラー

VSCodeでの仮想環境設定

VSCodeを使用している場合、「仮想環境の使用を推奨」というメッセージが表示されることがあります。この場合、以下の手順で環境を整えましょう。

1. venvモジュールのインストール

まず、仮想環境を作成するために必要なvenvモジュールをインストールします:

pip install virtualenv

エラーが出る場合は、管理者権限で実行してみてください:

# 管理者としてコマンドプロンプトを開いて実行
pip install virtualenv --user

2. 仮想環境の作成

コマンドプロンプトを開き、以下の手順で進めます:

# プロジェクトフォルダに移動
cd C:\test

# 仮想環境を作成(ここでエラーが出る場合は次のトラブルシューティングを参照)
python -m venv venv

3. 仮想環境の有効化

# Windowsの場合
venv\Scripts\activate

# 仮想環境が有効化されると、プロンプトの前に (venv) と表示されます
(venv) C:\test>

4. 必要なライブラリのインストール

pip install pandas openpyxl xlsxwriter

Excelファイル結合スクリプトの作成

まずは、以下のPythonスクリプトをmerge_excel2.pyとして保存します。このコードではxlsxwriterエンジンを使用して、より柔軟なExcel操作を実現します:

import pandas as pd
import os
from datetime import datetime

def merge_excel_files(input_folder, output_filename):
    """
    指定フォルダ内の全Excelファイルを1つのブックにまとめる
    各ファイルは個別のシートとして保存される
    
    Parameters:
    input_folder (str): 入力Excelファイルが存在するフォルダパス
    output_filename (str): 出力ファイル名
    """
    try:
        # ExcelWriterオブジェクトを作成
        with pd.ExcelWriter(output_filename, engine='xlsxwriter') as writer:
            
            # 入力フォルダ内の全Excelファイルを処理
            for filename in os.listdir(input_folder):
                # 出力ファイル自体は処理しないように条件を追加
                if filename.endswith('.xlsx') and 'combined_files' not in filename:
                    # フルパスを作成
                    file_path = os.path.join(input_folder, filename)
                    
                    # ファイルを読み込む(エンジンを明示的に指定)
                    df = pd.read_excel(file_path, engine='openpyxl')
                    
                    # シート名として使用するためのファイル名(拡張子なし)
                    sheet_name = os.path.splitext(filename)[0]
                    
                    # データフレームをシートとして保存
                    df.to_excel(writer, sheet_name=sheet_name, index=False)
                    
                    print(f"処理完了: {filename}")
            
        print(f"\n全ファイルの処理が完了しました。")
        print(f"出力ファイル: {output_filename}")
        
    except Exception as e:
        print(f"エラーが発生しました: {str(e)}")

# スクリプトの使用例
if __name__ == "__main__":
    # 入力フォルダと出力ファイル名を設定
    input_folder = "C:\\test"
    output_filename = f"C:\\test\\combined_files_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
    
    # 関数を実行
    merge_excel_files(input_folder, output_filename)

このスクリプトを実行すると、「No module named ‘xlsxwriter’」というエラーが表示されるかもしれません。これは必要なライブラリがインストールされていないためです。

よくあるエラーと解決方法

  1. 「’venv’ は内部コマンドまたは外部コマンドとして認識されていません」
    • 原因:Pythonのインストールが正しく完了していない可能性
    • 解決:Pythonを再インストールするか、システム環境変数のPATHにPythonを追加
  2. 「Permission denied」(権限エラー)
    • 原因:管理者権限が必要
    • 解決:コマンドプロンプトを管理者として実行
  3. 「pip is not recognized」
    • 原因:pipがインストールされていないか、PATHが通っていない
    • 解決:Pythonを再インストールするか、pipを個別にインストール

初心者の方へ

仮想環境の設定は最初は少し難しく感じるかもしれません。その場合は、以下の簡易的な方法で始めることもできます:

  1. グローバル環境での実行
pip install pandas openpyxl xlsxwriter

このように直接ライブラリをインストールしても、今回のExcelファイル結合プログラムは問題なく動作します。慣れてきたら、プロジェクト管理の良い練習として、仮想環境の使用にチャレンジしてみてください。

仮想環境を使用するメリット

  • プロジェクトごとに独立した環境を構築できる
  • ライブラリのバージョン競合を防げる
  • システムのPython環境を汚さない
  • プロジェクトの依存関係を簡単に管理できる

代替手段:Excel VBAとPower Query

Pythonの環境構築が難しい場合や、より身近なExcelの機能を使いたい場合は、以下の2つの方法があります。

1. Excel VBAを使用する方法

VBAは、Excelのマクロをコンピュータ言語で書くことができる機能です。近年、PythonとExcelの融合が進んでいますが、VBAは依然として強力なツールです。

Sub CombineExcelFiles()
    ' 変数の宣言
    Dim FolderPath As String
    Dim FileName As String
    Dim WorkBook As Workbook
    
    ' フォルダパスを設定
    FolderPath = "C:\test\"
    
    ' 実行結果を保存する新規ブックを作成
    Workbooks.Add
    ActiveWorkbook.SaveAs FolderPath & "Combined_Files_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsx"
    
    ' フォルダ内のExcelファイルを順に処理
    FileName = Dir(FolderPath & "*.xlsx")
    
    Do While FileName <> ""
        ' 自分自身(結果ファイル)は除外
        If FileName <> ActiveWorkbook.Name Then
            ' ファイルを開く
            Set WorkBook = Workbooks.Open(FolderPath & FileName)
            
            ' シートをコピー
            WorkBook.Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            
            ' コピーしたシートの名前を変更(拡張子を除く)
            ActiveSheet.Name = Left(FileName, Len(FileName) - 5)
            
            ' 開いたブックを閉じる
            WorkBook.Close SaveChanges:=False
        End If
        
        ' 次のファイルへ
        FileName = Dir()
    Loop
    
    MsgBox "処理が完了しました。"
End Sub

VBAの実行方法

  1. Excelを開き、新規ブックを作成
  2. Alt + F11 キーを押してVBAエディタを開く
  3. 左側のプロジェクトウィンドウでThisWorkbookをダブルクリック
  4. 上記のコードをコピー&ペースト
  5. マクロを実行する前に、以下の設定が必要:
    • 「ファイル」→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」
    • 「マクロの設定」で「すべてのマクロを有効にする」を選択
  6. F5キーまたは実行ボタン(▶)をクリックして実行

2. Power Queryを使用する方法(最も簡単)

Power QueryはExcelの標準機能で、プログラミング不要です:

  1. 「データ」タブを開く
  2. 「データの取得」→「フォルダーからのデータの取得」をクリック
  3. C:\test フォルダを選択して「OK」
  4. 表示されるプレビューで「結合」ではなく「変換」を選択
  5. 各ファイルが別々のクエリとして表示される
  6. 「データのロード先」で「新しいワークシート」を選択

ExcelとPythonの融合について

最近のMicrosoft Excelには「Python in Excel」という機能が追加され、Excel上で直接Pythonを実行できるようになっています(Microsoft 365登録者向け)。

ExcelとPythonを組み合わせるメリット

  1. データ分析の柔軟性
    • Excelの使いやすいUI
    • Pythonの強力な分析機能
  2. 自動化の可能性
    • 定型業務の自動化
    • 複雑な計算の実行
  3. 拡張性
    • Pandasなどの豊富なライブラリ
    • 機械学習との連携

どの方法を選ぶべきか?

  1. Power Query
    • 初心者向け
    • プログラミング知識不要
    • 単純な結合作業に最適
  2. VBA
    • Excelユーザー向け
    • プログラミング初心者でも比較的取り組みやすい
    • カスタマイズ性がある
  3. Python
    • より複雑な処理が必要な場合
    • 将来的な拡張性を考慮する場合
    • データ分析や自動化を本格的に学びたい場合

まとめ

今回は複数のExcelファイルを1つのブックにまとめる方法として、以下の3つのアプローチを紹介しました:

  1. Pythonを使用する方法
    • 最も柔軟で拡張性が高い
    • 自動化の可能性が広がる
    • 環境構築に少し手間がかかる
  2. Excel VBAを使用する方法
    • Excelユーザーにとって馴染みやすい
    • 中程度の柔軟性
    • マクロの有効化が必要
  3. Power Queryを使用する方法
    • 最も導入が簡単
    • プログラミング知識不要
    • Excelの標準機能で実現可能

選び方のポイント

  • すぐに結果が必要な場合:Power Query
  • Excel内での作業が好みの場合:VBA
  • 今後の発展性を考える場合:Python

今後の展望

ExcelとPythonの連携は今後さらに進化していくと予想されます。最初は手慣れた方法で始めつつ、徐々に新しい技術にもチャレンジしていくことをお勧めします。特に、定期的にファイル結合作業が発生する場合は、Python習得への投資も検討する価値があるでしょう。

次のステップとして以下をお勧めします:

  1. まずはPower Queryで基本的な操作を習得
  2. 次にVBAでプログラミングの基礎を学ぶ
  3. 余裕があればPythonにチャレンジ

プログラミング初心者の方も、この記事で紹介した方法から始めれば、徐々にスキルアップしていけるはずです。データ処理の効率化は、現代のビジネスにおいて重要なスキルの一つとなっています。

ぜひ、ご自身の環境や目的に合った方法を選んで、実践してみてください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次