openpyxlで、Excelに書式を設定したい ~セルのデータタイプを確認する~

※社外のコラムニストによる記事です。Python関連の情報をお伝えします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は日時フォーマットの指定方法について学びました。
今回はセルのデータタイプの設定方法を学びます。

例えばExcelに「2026/2/20」と入力すると、Excelはこのデータは日付っぽいぞと自動的に判断して日付型を設定します。同様に、「00123」と入力した場合、数値っぽいと判断して「123」に変えて数値型を設定します。つまり、Excelは中身の型を自動的に判定しているということになります。そのため、そのExcelの判定が間違っていた時には、書式設定で変更してあげなくてはいけません。

一方、Pythonは、値を扱う段階で、文字列・数値・日付などの型が明確に区別されています。
そのため、openpyxlを使ってセルに値を渡す時には、Python側が設定したデータの型に応じてセルに設定される型も変更されます。

openpyxlでは、セルに設定された値がどのような種類として扱われているかを、data_typeプロパティで確認できます。

<書式>

それでは、サンプルコードを見てみましょう。


P.88,89 サンプルコード

このプログラムは各セルに渡す値がどういった型を持っているのかを確認できるようになっています。

A1には数値の345、A2には文字列のabc、A3には日付の2021, 4, 1が設定されています。そしてB列には、A1、A2、A3それぞれのセルに設定されたデータの型が表示されるようになっています。

このプログラムを実行すると、次のようなExcelファイルが作成されます。

B列に表示されている「n」、「s」、「d」が実際のデータの型を示す値です。
それぞれ、数値(number)、文字列(string)、日付(datetime)という意味になります。

ちなみに、このプログラムではこの3種類しかありませんが、これ以外にもdata_typeプロパティで表示される結果があります。それがこちらの表です。ご参考まで。

値の例data_typeの結果内容
"abc"s文字列 (string)
123n数値 (number)
Trueb真偽値 (boolean)
datetime(...)d日付 (datetime)
=A1+B1f数式 (formula)
#DIV/0!eエラー

おまけ)number_formatとの違い

data_typeはセルに入っている値の種類を示すものです。一方、number_formatはその値をExcel上でどのように表示するかを指定するものです。
つまり、値そのものを変えるのではなく、見た目を整えるための設定です。例えば値に日付型(Pythonのdatetime)が設定されていたとして、その表示の形式を年月日にしたい、もしくは2026/2/20のようにしたいといった場合には、number_formatで指定する必要があります。

例えば先ほどのサンプルコードを次のように変更します。

すると、表示がこのように変わります。もちろん型は変更されません。

表示形式が変更されていることが確認できます。

ちなみに、Excelでは日付は内部的には数値(シリアル値)として保存されます。そのため、その数値に対して number_format を適用することで、日付の形式で表示されているだけとか。
表示形式を変更しても、見た目が変わるだけで、内部のデータ型に変更はないということになります。

今回は、セルのデータタイプと表示形式の違いについて確認しました。お付き合いいただき、ありがとうございました。

Pythonを活用した業務自動化やExcel業務の効率化に課題をお持ちの方は、ぜひグローバルウェイにご相談ください。業務内容に合わせた自動化の設計から開発・運用まで支援いたします。

https://gw-python.com/python-auto