![過去の自分](https://www.utataneblog760.com/blog/wp-content/uploads/2024/02/komatta_man4.jpg)
会社の先輩や別の人が書いたコードを見ると、
「iter_rows()」っていうのがよく出てくるんだけど、これって何なの?
![今の自分](https://www.utataneblog760.com/blog/wp-content/uploads/2024/01/icon-1.jpg)
「iter_rows」について知りたいんですね?
機能や使い方を解説いたします!
実践用の使用方法も紹介しますよ!
openpyxlでの「iter_rows()」の使い方を、
Python歴3年の私ができるだけわかりやすく解説し、解決に導きます。
「iter_rows()」は何ができる?
「iter_rows()」はセルの値を取得することができます。
シート内の範囲を指定して取得できるため、データをまとめたりするのにも便利です。
今回は「説明用の簡単な使い方」と、「実践用の使い方」の2種類を紹介いたします。
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
「iter_rows()」の使い方(説明用簡易版)
ひとまず全コードを網羅します。解説は後ほど行います。
全コード・実行見本
▼「input.xlsx」
![](https://utataneblog760.com/wp-content/uploads/2024/03/061-1.jpg)
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
for row in ws1.iter_rows(values_only = True):
for cell in row:
print(cell)
wb.save('input.xlsx')
実行結果:A1 B1 C1 D1 E1 A2 B2 ・・・D5 E5
for文についての解説は、下記記事でわかりやすく行っております。ご参考ください。
解説
for row in ws1.iter_rows(values_only = True):
for cell in row:
print(cell)
「iter_rows()」含め上記3行分を記述することで、
Sheet1に書かれた表の値を取得することができます。
取得順は、実行結果のとおりで、「A1」の次は「B1」と横に走ります。
「E1」まで来たら次は「A2」という具合に「E5」まで取得します。
>>iter_rows(values_only = True)
()内の引数「values_only = True」ですが、
これは「セルの値のみを返す」というもので、「返り値に関する引数」です。
![過去の自分](https://www.utataneblog760.com/blog/wp-content/uploads/2024/02/komatta_man4.jpg)
何を言っているのかわからないです…。
![今の自分](https://www.utataneblog760.com/blog/wp-content/uploads/2024/01/icon-1.jpg)
「values_only = True」は解説用に付けただけです。
これを付けないと実行結果が
<Cell ‘Sheet1’.A1> <Cell ‘Sheet1’.B1> <Cell ‘Sheet1’.C1>
と長くなってわかりにいので付けました。
今回の場合は取得されるのは値のみなので関係ありません。
忘れていただいても大丈夫です。
()内に入れる引数について「範囲指定」
「values_only」も含めて5種類あります。
主に、範囲指定で取得したい場合に使います。
- min_row:範囲指定する際の始点行番号(C2なら2)
- min_col:範囲指定する際の始点列番号(C2なら3)
- max_row:範囲指定する際の終点行番号(E4なら4)
- max_col:範囲指定する際の終点行番号(E4なら5)
- values_only:Trueにすると、セルの値のみを返す
![sample](https://utataneblog760.com/wp-content/uploads/2024/03/061-2-1.jpg)
上の画像のように「C2~E4」の範囲までを取得する、簡単な見本を見てみましょう。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
for row in ws1.iter_rows(min_row=2,min_col=3,max_row=4,max_col=5,values_only=True):
for cell in row:
print(cell)
wb.save('input.xlsx')
【範囲:C2~E4】
min_row=2
min_col=3
max_row=4
max_col=5
実行結果:C2 D2 E2 C3 D3 E3 C4 D4 E4
指定通り、C2~E4までが取得できています。
「iter_rows()」の使い方(実践例)
「Sheet1」に書かれた表を取得して、「Sheet2」にコピーするサンプルコードを見てみましょう。
実行見本・全コード
![](https://utataneblog760.com/wp-content/uploads/2024/03/061-4-1.jpg)
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
for row in ws1.iter_rows():
new_row = [cell.value for cell in row]
ws2.append(new_row)
wb.save('input.xlsx')
解説
for row in ws1.iter_rows():
new_row = [cell.value for cell in row]
ws2.append(new_row)
1行目、それから2行目の「for cell in row」は前項で出てきましたね。
セルの値を取得するという意味でした。
2行目の「cell.value」は、「取得したセルの値をどうするか」という意味だと思ってください。
「new_row =」が付いているため、「取得した値を変数(new_row)に入れる」
ということになります。
3行目の「ws2.append(new_row)」は、
「取得した値(new_row)をSheet2(ws2)に追加していく」
という結果になり、最終的にはSheet2に値をコピーすることができるわけです。
「append」は、配列に要素を追加するという効果があります。
詳しくは下記記事をご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでの「iter_rows()」の使い方を解説いたしました。
複数のシートにあるデータをまとめたりするのに便利ですので、ぜひご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!