PythonでExcelの自動化をしていて、エラーは出ないけど、思い通りの結果が反映されない場合の原因と対処法をご紹介します。
「Excelへ全く反映されない」
「一部しか転記されない」
「何行も同じ値が出力されてしまう」
このようなケースに私もよくぶつかります。
for文の書き方が間違っているときもあれば、元のExcelが原因となっているときもあります。
for文がうまく反映されない場合のチェック事項
エラーは出ないけど正しく反映されない場合、下記の項目をチェックしてみてください。
見落としやちょっとしたミスだけかもしれません。
- 代入(転記)したい値を右から左に代入しているか
- 転記元と転記先のExcelシートが正確に指定されているか
- for文で指定した範囲が正しく定義されているか(半角スペースなども合っているか)
- Excelを保存するワークブックが正しく指定されているか
- Excelを保存するコードがfor文の外に出ているか
- インデントは合っている?
特に難しいのは、インデントの位置によってfor文が正しく動かないことです。
例えば下記のような場合
15行目にbreakが入っているので、そこでループがストップしています。
そのため赤い点線で囲った部分はループの外に出さなければ、値は代入されずExcelは白紙のままです…
その他にも考えられる理由
このような原因も考えられます。
- for文で指定した範囲に値が存在しない
- if文がある場合、条件が適切に設定されていない
- 元のExcelに書式設定されていることが原因となることも
if文でif ws.cell(i,1).value==”xxx”のように”xxx”を設定している場合、この”xxx”部分に半角や全角のスペースが間違って入っている場合もプログラムが動きません。
元のExcelに書式が設定されていたりデータが入力されていると上手くいかない原因となるため、行と列を削除してクリーンにした状態で試してみてください。
for文が上手くいかなかったら
上記のチェック事項とprint関数を使って、原因を調べることをおすすめします!
for i in range()…の次の行にインデントを入れてprint(i)とすると、iを出力することができます。
print関数でfor文の結果を確認できれば、範囲内に値があるか、ループで値が正常に取得できているかを確認できるので、それを元にプログラムを見直すことができます。