Python:Excelでfor文が反映されない理由と対処法

Pythonでエラーは出ないが反映されないfor文の対処法

PythonでExcelの自動化をしていて、エラーは出ないけど、思い通りの結果が反映されない場合の原因と対処法をご紹介します。

Excelへ全く反映されない

一部しか転記されない

何行も同じ値が出力されてしまう

このようなケースに私もよくぶつかります。

for文の書き方が間違っているときもあれば、元のExcelが原因となっているときもあります。

for文がうまく反映されない場合のチェック事項

エラーは出ないけど正しく反映されない場合、下記の項目をチェックしてみてください。

見落としやちょっとしたミスだけかもしれません。

  • 代入(転記)したい値を右から左に代入しているか
  • 転記元と転記先のExcelシートが正確に指定されているか
  • for文で指定した範囲が正しく定義されているか(半角スペースなども合っているか)
  • Excelを保存するワークブックが正しく指定されているか
  • Excelを保存するコードがfor文の外に出ているか
  • インデントは合っている?

特に難しいのは、インデントの位置によってfor文が正しく動かないことです。

例えば下記のような場合

for文のインデントが原因でExcelに反映されないコード例

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文の結果を確認できれば、範囲内に値があるか、ループで値が正常に取得できているかを確認できるので、それを元にプログラムを見直すことができます。

ABOUT US
中野友梨
旅行業の会社を運営。
慶応義塾大学卒

書類作成、確認作業などに追われる日々の仕事。
一生懸命やっているつもりだった。
計算ミス、手配ミスにヒヤヒヤする日々。
仕事の効率をなんとかしなけらばいけないと思っていたけど、 どうしたらよいのか分からなかった。
Pythonの世界なんて、全く知らなかった。
そんな私がPythonで仕事が効率化されることによって、公私ともに大きく 変わるとは、夢にも思っていなかった..。

業務効率化のためにPythonを始めたことがきっかけで、Pythonにはまりました。(個人利用レベル)
詳細はこちら

労働時間が大きく削減され、仕事が大カイゼンされて自由な時間も生まれました。
私のした素晴らしい経験を共有したい、仕事の効率が悪いけど、どうにかしたいという悩みを持った人々に向けて、 Pythonがいいよ、と教えてあげたい。
このブログでは、私が経験したエラー解決や迷い所、Pythonの活用方法をお伝えします。