サイトアイコン ITC Media

面倒な繰り返し作業を自動化!Pythonのforループで複数Excelファイルを一括処理しよう

(最終更新月: 2025年8月13日)

✓当記事はこんな方におすすめです

✓当記事で理解できること

当記事では、プログラミングにおける繰り返し処理の基本「forループ」について、その概念から具体的な使い方まで、実用的なサンプルコードとともに深く掘り下げてご説明します。

このチュートリアルは、こちらのアプリケーション上でコードを実行しながら進めることを想定しています。環境構築は一切不要ですので、すぐに学習を始められます。

最後まで読んでいただければ、大量のファイルを手作業で処理する日々から解放される第一歩を踏み出せるはずです。

それでは、一緒に見ていきましょう。

運営者プロフィール

現在はIT企業のプロダクトマネージャーとして、個人向け/社内向けシステムなど、複数のシステム開発・運営に携わっています。

Webサイト構築やECサイトの開発経験に加えて、PythonなどのプログラミングやSalesforceなどのクラウドアプリケーションに関する幅広い知識・経験を活かして「プログラミング初心者がスムーズに学べるサイト」を目指しています。

Githubでは、趣味で作成したアプリなどを公開しています。

https://github.com/Yulikepython/

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

繰り返しの達人「forループ」とは?

このセクションでは、Pythonにおける繰り返し処理の基本である「forループ」について解説します。

なぜなら、前回学んだ方法ではファイルを1つずつしか処理できず、ファイルが増えるたびにコードを書き直す必要があるからです。forループをマスターすれば、ファイルがいくつあっても同じコードで対応できるようになります。

【コラム】forループの相棒!データを入れる箱「リスト」とは?

forループを使いこなすには、まずその相棒である「リスト」というデータ構造を理解する必要があります。

なぜなら、forループは「リストに入っているものを順番に取り出して処理する」という動きをするため、繰り返し処理の対象となるデータ群をリストとしてまとめておく必要があるからです。

リストは、複数のデータを順番に並べて格納できる、便利な整理棚のようなものです。角括弧[]とカンマ,を使って、以下のように簡単に作ることができます。

# これがリストです!角括弧[]で囲み、カンマ,で区切ります
shopping_list = ['リンゴ', 'バナナ', '牛乳']

リストには、文字列(’リンゴ’など)や数値(100など)、真偽値(True/False)といった様々な種類のデータ(データ型)を格納できます。リストは、繰り返し処理を行いたい複数のデータをまとめて管理するための基本的なツールなのです。データ型についてさらに詳しく知りたい方は、「【2025年最新版】Pythonの型を完全解説|型の確認・使い分け・型ヒントまで徹底ガイド」の記事も参考にしてください。

身近な例え話で学ぶforループ

forループは、リストに入ったものを順番に取り出して、一つずつ同じ処理を自動で行ってくれる仕組みです。

これだけ聞くと難しく感じるかもしれませんが、私たちの日常生活にも同じような動きがあります。例えば、買い物リストを思い浮かべてください。リストに書かれた品物を、上から順に一つずつ買い物カゴに入れていきますよね。

この「リストのアイテムを一つずつ取り出して、同じ作業(カゴに入れる)を繰り返す」という一連の動作を、プログラムで表現したものがforループです。先ほどの買い物リストをPythonで処理すると、このようになります。

# shopping_listから、itemを一つずつ取り出して繰り返す
for item in shopping_list:
    print(f'{item}をカゴに入れました')

# 実行結果
# リンゴをカゴに入れました
# バナナをカゴに入れました
# 牛乳をカゴに入れました

このように、forループを使えば、リストの中身がいくつあっても、同じ処理を自動で適用できるのです。

forループの構文を分解解説

forループを正しく使うためには、その基本的な書き方(構文)を理解することが不可欠です。

構文は、プログラムが正しく動作するための「言葉のルール」であり、一つでも間違えるとエラーになってしまうため、各要素の役割をしっかり把握しておく必要があります。

先ほどのコードを例に、構文の各要素を分解してみましょう。

# for (これから繰り返し) item (を一つ取り出し) in (〜の中から) shopping_list (このリストを対象に): (処理を開始)
for item in shopping_list:
    # インデント(字下げ)されたこの部分が繰り返される
    print(f'{item}をカゴに入れました')

【準備】複数のExcelファイルをアップロードして読み込もう

このセクションでは、今回のチュートリアルの本題である「複数ファイルの処理」を行うためのデータを準備します。

アプリケーションのファイルアップロード機能を使い、あなたの手元にある複数のExcelファイルをPythonで扱えるように読み込んでいきましょう。

アプリケーションでファイルをアップロードする

まず、このチュートリアルで使う複数のExcelファイル(4月〜3月の売上データ)を準備してください。

準備ができたら、アプリケーション画面にある「ファイルを選択」ボタンをクリックし、処理したいExcelファイルをすべて選択してアップロードします。アップロードされたファイルは、アプリケーション内の仮想的な /tmp/ という場所に保存されます。

【重要】ファイルサイズに関する注意

一度に大量のファイルや、サイズが非常に大きいファイルをアップロードすると、ブラウザのメモリ制限によりエラーが発生する可能性があります。まずは数個の小さなファイルで試し、問題なく動作することを確認してから扱うファイル数を増やすようにしてください。

アップロードしたファイル一覧を取得し、forループで処理する

ファイルがアップロードできたら、それらをPythonで扱えるようにプログラムで読み込みます。

まず、Pythonのosという標準ライブラリを使って、/tmp/ディレクトリにあるファイル名の一覧をリストとして取得します。そしてforループを使い、取得したファイル名を一つずつ取り出して処理していきます。

import os
import pandas as pd

# /tmp/ ディレクトリにあるファイル名の一覧を取得
try:
    file_names = os.listdir('/tmp/')
    print(f"アップロードされたファイル: {file_names}")

    # 変換したデータフレームを格納するための空のリストを用意
    all_dfs = []

    # forループでファイル名を一つずつ処理
    for name in file_names:
        # ファイルのフルパスを作成
        path = f'/tmp/{name}'
        print(f"{path} を読み込んでいます...")

        # Excelファイルを読み込み、データフレームに変換
        df = pd.read_excel(path)
        # 変換後のデータフレームをall_dfsリストに追加
        all_dfs.append(df)

    print("すべてのファイルの読み込みが完了しました!")
    # all_dfsリストに、アップロードされたファイルのデータフレームが格納されています。

except FileNotFoundError:
    print("ファイルがアップロードされていません。先にExcelファイルをアップロードしてください。")

ここで、path = f'/tmp/{name}' という新しい書き方が出てきましたね。これは**f-string(f文字列)**と呼ばれる、Pythonの非常に便利な機能です。文字列の先頭に f を付け、文字列中の {} で囲んだ部分に変数の値を直接埋め込むことができます。f-stringについて詳しく知りたい方は、「【初心者必見】Pythonのf文字列(f-strings)完全ガイド」の記事も参考にしてください。

【実践】forループで、複数ファイルを一気に処理!

お待たせしました!いよいよ、このセクションでforループの真価を発揮させます。

先ほど読み込んだデータが格納されたリストall_dfsを使い、すべての月のデータを一括で表示するプログラムを作成します。これにより、面倒な繰り返し作業がどれだけ簡単になるかを実感できるはずです。

処理の流れを可視化しよう

プログラムを書き始める前に、まず処理の全体像を頭の中で整理することが大切です。

なぜなら、いきなりコードを書き始めると、途中で何をしていたか分からなくなったり、意図しないエラーに繋がったりすることがあるからです。最初に簡単な言葉で手順を書き出すことで、ロジックが明確になり、スムーズにコーディングを進められます。

今回の処理の流れは、非常にシンプルです。

  1. アプリケーションで複数のExcelファイルをアップロードする。
  2. os.listdir()でアップロードされたファイル名の一覧を取得する。
  3. forループを使い、ファイル名を一つずつ取り出してPandasで読み込み、データフレームのリスト(all_dfs)を作成する。
  4. もう一度forループを使い、今度はall_dfsリストから1ヶ月分のデータ(データフレーム)を順番に取り出す。
  5. 取り出したデータの中身を表示して、ちゃんと読み込めているか確認する。

これから書くコードは、この流れの4番と5番を忠実に実行するものになります。

複数月のデータを一括で表示するコード

それでは、先ほど整理した流れに沿って、実際に複数月のデータを一括で表示するコードを書いてみましょう。

forループを使えば、たった数行のコードで12ヶ月分のデータを順番に処理することができます。手作業で12回も同じ操作を繰り返す必要はもうありません。

以下のコードでは、enumerateという便利な関数を使っています。これにより、ループの回数(何番目のデータか)も同時に取得できるため、「○番目のデータ」といった表示が簡単に実現できます。enumerateについて詳しく知りたい方は、「【簡単】Python enumerate関数の使い方を実例付で解説」もご覧ください。

# (前のセクションの準備コードはすべて実行済みとする)

print('--- 複数月のデータ表示を開始します ---')

# all_dfsリストにデータがあるか確認
if 'all_dfs' in locals() and all_dfs:
    # all_dfsリストの中身を一つずつ取り出して処理
    # enumerate を使うと、何番目のデータ(i)と中身(month_df)を同時に取得できる
    for i, month_df in enumerate(all_dfs):
        print(f'▼ {i+1}番目にアップロードされたデータ')

        # データの中身を先頭5行だけ表示
        print(month_df.head())
        print("-" * 30) # 区切り線

    print('--- すべてのデータの処理が完了しました! ---')
else:
    print("データが読み込まれていません。前の手順を先に実行してください。")

**見てください!たったこれだけのコードで、アップロードしたすべてのデータを表示できました。**これがforループの威力です。データが100個、1000個あっても、このコードは一切変更する必要がありません。

【参考】自分のPCで実行する場合は?

今回の方法はブラウザ上でファイルを扱いましたが、自分のPCにPythonの実行環境を構築した場合も、処理の考え方はほとんど同じです。

違うのは、ファイルをどの場所から読み込むか、という点だけです。PC上では、スクリプトと同じフォルダにExcelファイルを置いておけば、os.listdir('.')のようにカレントディレクトリ(今いる場所)のファイル一覧を取得して処理できます。

# 自分のPCで実行する場合のコード例
import os
import pandas as pd

# スクリプトと同じ場所にあるファイル一覧を取得
file_names = os.listdir('.')
excel_files = [f for f in file_names if f.endswith('.xlsx')] # Excelファイルのみを抽出

all_dfs = []
for file_name in excel_files:
    print(f'--- {file_name} を読み込み中 ---')
    df = pd.read_excel(file_name)
    all_dfs.append(df)
    print(f'{file_name} の処理が完了しました。')

ブラウザでもPCでも、「ファイル一覧のリストを取得し、forループで順番に処理する」という本質は変わらないということを理解しておきましょう。

まとめ

今回は、面倒な繰り返し作業を自動化する魔法の呪文、「forループ」について学びました。最後に、今回の重要なポイントを3つ振り返っておきましょう。

さて、すべてのファイルの中身を覗けるようにはなりましたが、まだデータはバラバラのままです。次回はいよいよ感動の最終回!これらのデータをプログラムでガッチャンコと一つに合体させ、毎月の集計作業に永遠の別れを告げましょう。お楽しみに!

モバイルバージョンを終了