「python openpyxl cell 2重ループ」
という検索キーワードでアクセスがありました。
OpenPyXLを使って、セル範囲に対する2重ループはどのように書けばいいのかを調べていらしたのでしょう。
セル範囲に対する2重ループは、複数の書き方が可能ですが、この記事では、
「python openpyxl cell 2重ループ」
と検索なさった方が想定していると思われるコードをご紹介します。
行に対するループの中で列に対するループを回すサンプル
Cドライブtempフォルダーに存在するsample.xlsxブックの「Sheet1」ワークシートのA1:D2セルに、下図のようにデータを入力しておいてから、
以下のスクリプトを実行してください。
bk = xl.load_workbook(r'C:\temp\sample.xlsx')
ws = bk['Sheet1']
for r in range(1, 3):for c in range(1, 5):
print(ws.cell(r, c).value, r, c)
Excel上のデータ、
あ い う え
春 夏 秋 冬
が、
あ 1 1
い 1 2
う 1 3
え 1 4
春 2 1
夏 2 2
秋 2 3
冬 2 4
と、アルファベットの「Z」を手書きするときのような順序で出力されます。
セル内文字列につづいて出力されている数値は、2重ループのために使っている変数rと変数cの値です。
サンプルで行っている処理
拙著『VBAユーザーのためのPython超入門』の「6-2. range関数の引数」でも解説しているPython標準のrange()関数を使って、変数rが1から2までforループを回し、
for r in range(1, 3):
その中で、変数cが1から4になるまで、もう1つforループを回しています。
for c in range(1, 5):
この2重ループで使っているカウンター変数rとcをWorksheet.cell()メソッドの引数に指定することで、セルを表すCellオブジェクトを順番に取得して、
print(ws.cell(r, c).value, r, c)
Cell.value属性で取得できるセルの値を、
print(ws.cell(r, c).value, r, c)
Python標準のprint()関数で出力しています。また、変数rとcの値も一緒に出力しています。
print(ws.cell(r, c).value, r, c)
列に対するループの中で行に対するループを回す例
先ほどのコードの2重ループ部分
for c in range(1, 5):
print(ws.cell(r, c).value, r, c)
を、
for r in range(1, 3):
print(ws.cell(r, c).value, r, c)
にして実行した場合は、列に対するループの中で行に対するループを回すことになり、Excel上のデータ、
あ い う え
春 夏 秋 冬
が、
あ 1 1
春 2 1
い 1 2
夏 2 2
う 1 3
秋 2 3
え 1 4
冬 2 4
と出力されます。
- 『VBAユーザーのためのPython超入門』に登場するPythonの関数・メソッド一覧
- OpenPyXLのiter_rows()メソッドやiter_cols()メソッドを使ってCellを順番に取得する
- OpenPyXLのrows属性やcolumns属性を使ってCellを順番に取得する
- OpenPyXLでセル範囲を文字列で指定してCellを順番に取得する
最終更新日時:2023-01-25 14:17
Home » Python » OpenPyXLの使い方 » OpenPyXLの2重ループでWorksheet.cell()メソッドを使ってCellオブジェクトを順番に取得する