Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。 VBAユーザーの為のPYTHON

Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。

Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。VBAユーザーの為のPYTHON
Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。

VBAユーザーの為のPYTHON 03回

Excelブックから、条件にあったデータを抽出し別ブックに保存。

3回目では、2回目の2つ目のプログラム、Excelのブックにあるデータから、条件にあったデータを抽出し別ブックに保存の解説をします。

【いきなりPython × Excel】Excelのから条件に合うデータを抽出保存3回 VBAユーザーの為のPython入門

1. Pythonはプログラミング言語です。そのプログラミング言語には2種類あり、コンパイラ型言語と、インタープリタ言語の2種類あります。
コンパイラ型言語には、C/C++,FORTRAN,COBOL などがです。事前に全てのソースコードをコンパイル翻訳してからプログラムを実行するため、実行速度が速いという特徴があります。
インタプリタ言語には、JavaScript、Python、Ruby、PHP、BASIC、Lispなどがあります。インタプリタ言語は、コードを実行する際に1行ずつ機械語に翻訳していく言語です。
インタプリタ言語はコンパイラよりも処理速度が遅くなりますが、1行ずつ実行するため、エラーの場所を見つけやすいメリットがあります。


Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。-1

2.pythonはオブジェクト思考の言語で もあり ますつまりpythonで扱うデータは全て オブジェクトとして扱えます。
これはVBAと 同じ考え方ですからVBAを使っている皆さんはすぐに馴染めると思います。


Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。-2

3. ライブラリが豊富にあり、様々なプログラムを作成することができます。これがPythonというプログラム言語が今 1番人気と言われる理由かと思います。


Excelから条件に合うデータを抽出保存!PythonでExcelの操作を自動化しよう。-3

4.Pythonでよく使うライブラリのほんの一部。

Excelから条件に合うデータを抽出保存-4

2回目の後半コード「読み込んだデータから条件に合ったデータを探す」の解説

5.いきなりPythonの2回目では、ファイルをColaboratoryのセッションストレージにアップロードして、それを読み込みました。

Excelから条件に合うデータを抽出保存-5

いきなりPython3回ではコードを追加し、 「読み込んだデータから条件に合ったデータを探す」に進化させました。
そのコードの解説をしたいと思います。
前半部分は、ほとんど同じコードです。

いきなりPython3回-前半コード

6.後半にて、 「# 合計点数が160未満の生徒を探す」コードが追加されます。

いきなりPython3回-後半コード

実行すると、セッションストレージに「試験結果_補習者決定.xlsx」 というブックが作成されます。それでは追加した”条件で絞り込むためのコード”を説明します。
6列目の値が<160 ならばそのデータを補習者.xlsx に書き込むというものです。

そして、その補習者.xlsxを別名で保存します。

Pyhtonを始めたいVBAユーザーの為のPython入門16

7. 作成されたブックを右クリックして、ダウンロードを選択して、 保存するフォルダを指定します。
以下はブックをダウンロード後、ブックを開いて確認したところです。

Excelから条件に合うデータを抽出保存-7

8. 以下のコードのIf文で、行のセル row[5] これは6番目のセル、つまり6列目ということです。
それが、is not None and row[5] < 160: ならば、 補習者リストに追加しています。

  # 合計点数が160未満の生徒を探す
  for row in ws.iter_rows(min_row=2, max_col=6, max_row=ws.max_row, values_only=True):
      # 合計点数を確認 row[5]は6番目のセル
      if row[5] is not None and row[5] < 160:
          # 補習者リストに追加
          last_row += 1  # 新しい行にデータを追加するため、行番号を増やす
          for col, value in enumerate(row, start=1):
              new_ws.cell(row=last_row, column=col, value=value)
  

その繰り返しを for row in ws.iter_rows 分行います。
最終的に、ブックに名前をつけて保存したいので、 以下のコードでファイル名を設定して保存しています。

  # 保存ファイル名の作成
  xlsx_file = "/content/試験結果.xlsx"
  file_name = os.path.splitext(os.path.basename(xlsx_file))[0]
  new_wb.save(f"/content/{file_name}_補習者決定.xlsx")
  

Colaboratory で使用したコードの全体「補習者を探す」

  import openpyxl as op
  import os
  
  # 元のファイルを読み込み
  source_file = "/content/試験結果.xlsx"
  wb = op.load_workbook(source_file, data_only=True)
  ws = wb.active
  
  # 補習者.xlsx ファイルをひな形として読み込む
  template_file = "/content/補習者.xlsx"
  new_wb = op.load_workbook(template_file)
  new_ws = new_wb.active
  
  # 補習者.xlsxの既存データの最終行を見つける
  last_row = new_ws.max_row
  
  # 合計点数が160未満の生徒を探す
  for row in ws.iter_rows(min_row=2, max_col=6, max_row=ws.max_row, values_only=True):
      # 合計点数を確認  小なりを記号に書き換えます。
      if row[5] is not None and row[5] < 160:
          # 補習者リストに追加する前に、データをプリントする
          print("転記するデータ:", row)
          # 補習者リストに追加
          last_row += 1  # 新しい行にデータを追加するため、行番号を増やす
          for col, value in enumerate(row, start=1):
              new_ws.cell(row=last_row, column=col, value=value)
  
  # 保存ファイル名の作成
  xlsx_file = "/content/試験結果.xlsx"
  file_name = os.path.splitext(os.path.basename(xlsx_file))[0]
  new_wb.save(f"/content/{file_name}_補習者決定.xlsx")