Home » Python » OpenPyXLの使い方 » OpenPyXLの2重ループでWorksheet.cell()メソッドを使ってCellオブジェクトを順番に取得する

OpenPyXLの2重ループでWorksheet.cell()メソッドを使ってCellオブジェクトを順番に取得する

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.11.1(64-bit) + OpenPyXL 3.0.10

「python openpyxl cell 2重ループ」
という検索キーワードでアクセスがありました。

OpenPyXLを使って、セル範囲に対する2重ループはどのように書けばいいのかを調べていらしたのでしょう。

セル範囲に対する2重ループは、複数の書き方が可能ですが、この記事では、
「python openpyxl cell 2重ループ」
と検索なさった方が想定していると思われるコードをご紹介します。

行に対するループの中で列に対するループを回すサンプル

Cドライブtempフォルダーに存在するsample.xlsxブックの「Sheet1」ワークシートのA1:D2セルに、下図のようにデータを入力しておいてから、

以下のスクリプトを実行してください。

import openpyxl as xl

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 r in range(1, 3):
    for c in range(1, 5):
        print(ws.cell(r, c).value, r, c)

を、

for c in range(1, 5):
    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

と出力されます。

最終更新日時:2023-01-25 14:17

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLの2重ループでWorksheet.cell()メソッドを使ってCellオブジェクトを順番に取得する

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.