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

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

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

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

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

いきなりPython3回ではコードを追加し、
「読み込んだデータから条件に合ったデータを探す」に進化させました。
そのコードの解説をしたいと思います。
前半部分は、ほとんど同じコードです。
6.後半にて、 「# 合計点数が160未満の生徒を探す」コードが追加されます。

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

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")