Pythonで複数のExcelファイルを1つのブックにまとめる方法
はじめに
Excelファイルを扱う業務で、複数のファイルを1つのブックにまとめたいことはよくあります。今回は、10個のExcelファイルを1つのブックの個別シートとしてまとめる方法を解説します。手動でも可能ですが、Pythonを使えばより効率的に処理できます。
環境設定
- Windows 10/11
- Python 3.10以上
- 必要なライブラリ:pandas, openpyxl
準備するファイル
本記事では、初心者の方でも実践的に学習できるように、サンプルファイルをご用意しました。実際の株式市場データを模したテストデータとなっています。
ダウンロードとセットアップ
- サンプルファイルをダウンロード(10個のExcelファイル:約4MB)
- ダウンロードしたZIPファイルを解凍
- 解凍したファイルを
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’」というエラーが表示されるかもしれません。これは必要なライブラリがインストールされていないためです。
よくあるエラーと解決方法
- 「’venv’ は内部コマンドまたは外部コマンドとして認識されていません」
- 原因:Pythonのインストールが正しく完了していない可能性
- 解決:Pythonを再インストールするか、システム環境変数のPATHにPythonを追加
- 「Permission denied」(権限エラー)
- 原因:管理者権限が必要
- 解決:コマンドプロンプトを管理者として実行
- 「pip is not recognized」
- 原因:pipがインストールされていないか、PATHが通っていない
- 解決:Pythonを再インストールするか、pipを個別にインストール
初心者の方へ
仮想環境の設定は最初は少し難しく感じるかもしれません。その場合は、以下の簡易的な方法で始めることもできます:
- グローバル環境での実行
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の実行方法
- Excelを開き、新規ブックを作成
- Alt + F11 キーを押してVBAエディタを開く
- 左側のプロジェクトウィンドウでThisWorkbookをダブルクリック
- 上記のコードをコピー&ペースト
- マクロを実行する前に、以下の設定が必要:
- 「ファイル」→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」
- 「マクロの設定」で「すべてのマクロを有効にする」を選択
- F5キーまたは実行ボタン(▶)をクリックして実行
2. Power Queryを使用する方法(最も簡単)
Power QueryはExcelの標準機能で、プログラミング不要です:
- 「データ」タブを開く
- 「データの取得」→「フォルダーからのデータの取得」をクリック
C:\test
フォルダを選択して「OK」- 表示されるプレビューで「結合」ではなく「変換」を選択
- 各ファイルが別々のクエリとして表示される
- 「データのロード先」で「新しいワークシート」を選択
ExcelとPythonの融合について
最近のMicrosoft Excelには「Python in Excel」という機能が追加され、Excel上で直接Pythonを実行できるようになっています(Microsoft 365登録者向け)。
ExcelとPythonを組み合わせるメリット
- データ分析の柔軟性
- Excelの使いやすいUI
- Pythonの強力な分析機能
- 自動化の可能性
- 定型業務の自動化
- 複雑な計算の実行
- 拡張性
- Pandasなどの豊富なライブラリ
- 機械学習との連携
どの方法を選ぶべきか?
- Power Query
- 初心者向け
- プログラミング知識不要
- 単純な結合作業に最適
- VBA
- Excelユーザー向け
- プログラミング初心者でも比較的取り組みやすい
- カスタマイズ性がある
- Python
- より複雑な処理が必要な場合
- 将来的な拡張性を考慮する場合
- データ分析や自動化を本格的に学びたい場合
まとめ
今回は複数のExcelファイルを1つのブックにまとめる方法として、以下の3つのアプローチを紹介しました:
- Pythonを使用する方法
- 最も柔軟で拡張性が高い
- 自動化の可能性が広がる
- 環境構築に少し手間がかかる
- Excel VBAを使用する方法
- Excelユーザーにとって馴染みやすい
- 中程度の柔軟性
- マクロの有効化が必要
- Power Queryを使用する方法
- 最も導入が簡単
- プログラミング知識不要
- Excelの標準機能で実現可能
選び方のポイント
- すぐに結果が必要な場合:Power Query
- Excel内での作業が好みの場合:VBA
- 今後の発展性を考える場合:Python
今後の展望
ExcelとPythonの連携は今後さらに進化していくと予想されます。最初は手慣れた方法で始めつつ、徐々に新しい技術にもチャレンジしていくことをお勧めします。特に、定期的にファイル結合作業が発生する場合は、Python習得への投資も検討する価値があるでしょう。
次のステップとして以下をお勧めします:
- まずはPower Queryで基本的な操作を習得
- 次にVBAでプログラミングの基礎を学ぶ
- 余裕があればPythonにチャレンジ
プログラミング初心者の方も、この記事で紹介した方法から始めれば、徐々にスキルアップしていけるはずです。データ処理の効率化は、現代のビジネスにおいて重要なスキルの一つとなっています。
ぜひ、ご自身の環境や目的に合った方法を選んで、実践してみてください。