【Python エクセル】空白セル(None<NoneType>)をIF文で判定する方法

時計 2020.12.11 / 時計

【Python エクセル】空白セル(None<NoneType>)をIF文で判定する方法

Pythonではopenpyxlやpywin32などのパッケージを使用してエクセルを操作することができます。
これらはエクセル操作を自動化するのに使用されます。

エクセル操作をPythonでプログラミングする際に、For文やWhile文を駆使して、空のセルが登場するまで特定の操作を繰り返し行うプログラムを組むことがあります。

その際に指定セルが空のセルかどうかを判定する必要があります。

本記事では、空白セル(None(NoneType))をIF文で判定する方法について詳しく解説していきます。

空白セルとは

Pythonのopenpyxlを使用し、エクセル操作をプログラミングしている際に空白セルが登場したら繰り返し作業をbreakで抜け出す必要がありました。

空白セルなので文字数は0、つまりそのセルの中身をlen()関数の引数に置き、帰ってきた値が0であればそのセルは空白セルだと判別できると考えました。

エラー発生

以下のようなサンプルプログラムを作成し、len()関数の引数にセルの中身を入れ、0になるまで処理を繰り返すようにしました。

そしていざ空白セルの判別になったとき、エラーが発生しました。

import openpyxl

main_path = r'C:\office54'

wb = openpyxl.load_workbook('office54.xlsx', read_only = True)
ws = wb.active

i = 1

while not len(ws.cell(i, 1).value) == 0:
    print(ws.cell(i, 1).value)
    i = i + 1
エラー表示

object of type 'NoneType' has no len()

空白セルは「NoneType」のオブジェクトなのでlen()が使えないとエラー表示されました。

ではどのように空白セルを判別すればいいのか。

空白セルをprint()する

空白セルの中身をprint()すると以下の表示がされます。

  • None

Noneとはオブジェクトが存在しないことを表しています。

ここで空白セルはNoneであることがわかりました。

そのためセルがNoneであるかどうかで判別すればいいことがわかります。

Noneとは

NoneとはNoneType型に唯一存在する値です。
Noneの意味はそのまま値が存在しないという意味です。

値が存在しないことを表すことに用いられており、今回でいえば空白セルの値が存在しないということを表しています。

空白セル(None(NoneType))の判定方法

変数や関数による戻り値がNone(NoneType)であるか判定するには、is Noneを使用します。

  • if 変数 is None:

is Noneでは、真であればTrue、偽であればFalseを返します。
この方法を用いることで、エクセルが空白かどうかを判定することができます。

以下にサンプルプログラムをis Noneで修正したものを記載します。

import openpyxl

main_path = r'C:\office54'

wb = openpyxl.load_workbook('office54.xlsx', read_only = True)
ws = wb.active

i = 1

while not len(ws.cell(i, 1).value) is None:
    print(ws.cell(i, 1).value)
    i = i + 1

まとめ

Pythonのエクセル操作で用いる空白セル(None(NoneType))をIF文で判定する方法はいかがでしたか。

エクセル操作では対象のセルが空白セルかどうかの判定は非常に多く使用します。
Pythonでエクセル操作をする方は、ぜひ使い方を覚えておいてください。

連載記事

Pythonによるエクセル操作の記事を定期的にアップしております。
ぜひエクセル仕事の効率化のためにご参照ください。