【Python】openpyxlでExcelから読み込み・書き込みする方法【数式の結果を取得する方法も解説】

Pythonを使ってExcel操作をするうえでセルの値を自由に変更できないと意味がないですよね。

文字列や数値の書き込みだけでなく数式の書き込みもできるようになりましょう。

今回はセルの基本的な扱い方を紹介していきます。

もちろん、Excelファイルとシートは開いている前提で解説していきます。

これから紹介するコードは以下のコードの続きになると考えてください。

シートまで開いた状態からのスタートになります。

これらの開き方に関しては以下の記事にまとめています。

関連記事

PythonでExcel操作をするためにはopenpyxlモジュールが必要です。pipでインストールしてから使う必要があります。 以下ではワークブック(Excelファイル)は開いているものとして解説していきます。これから紹介するメソ[…]

PythonでExcelのシートを読み込み・追加・新規作成・コピー・名前の変更する方法
関連記事

PythonでExcel操作をするときには必ずファイル(ワークブック)の読み込みからシートの指定をする必要があります。 今回はそんな基本的な部分のコードの書き方を3ステップで紹介していきます。 1:openpyxlモジュールの[…]

PythonでExceを読み込む方法【ワークブックからシートの指定まで】
  • Excelファイルを取得するとWorkbookオブジェクトが作られます
  • シートを取得するとWorksheetオブジェクトが作られます
  • セルを取得するとCellオブジェクトが作られます(←この記事の内容)

セルを指定する方法

行列名を使う

Excelの行名には1から始ま整数が、列名にはAから始まるアルファベットがそれぞれ割り振られています。

ですから、行列名は「A2」「F25」のようにアルファベットと整数の組み合わせで決められています。

この行列名をWorksheetオブジェクトに指定ストとそのCellオブジェクトを作ることができます。

cellメソッドを使う

  • Worksheetオブジェクトにcellメソッドを使う
  • row(行)とcolumn(列)をキーワード引数で渡す
  • 行も列も整数で指定する

上のように行列名で指定するとアルファベットと整数が出てくるので煩雑になります。また、for文などのループ処理では扱いにくくなります。

そこで、行と列を両方とも整数で指定するためにcellメソッドを使います。このメソッドを使うと行と列を1から始まる整数で指定できます。

このように整数でセルを指定することによって以下のようにループ処理させることができます。

このとき使っているセルの値を取得するvalue属性の使い方は下に続きます。

セルの読み書き

value属性:セルの値を取得

  • セルを指定する
  • value属性でセルの値を取得
  • 数値と文字列は区別される
openpyxlでセルの読み書き
元のデータ

上のExcelデータをもとに値を取り出しています。

セルに何も入力されていないときは「None」扱いになります。

以下のように書くとセルに書き込むことができます。

数式の書き込み

  • 数式ごと文字列で入力する
  • イコールから入力する
openpyxlでセルの読み書き
Excelのデータ

'=SUM(A1:A3)'のように数式を書き込んで計算することは可能です。画像でも実際のExcelファイルには計算された1000が書き込まれていることが分かります。

ですがその値を出力しようとすると'=SUM(A1:A3)'となり計算結果が分かりません。

そこで計算結果を確認するにはWorkbookオブジェクトの読み込み方を変える必要があります。

数式の読み込み

  • openpyxl.load_workbook関数を使う
  • キーワード引数に「data_only=True」を指定する
  • デフォルトでは「data_only=False」になっている

先ほどの例でA4のセルに1000と計算されている値を取得しています。このようにWorkbookオブジェクトにキーワード引数を指定するとデータのみ取得できます。

Workbookオブジェクトは複数個作ることができます。数式を入力する用と計算結果を取得するようで一つずつオブジェクトを作ると編集しやすいですね。

もしこの方法で計算結果を取得できない場合は、数式を入力した後に一度Excelを開いて上書き保存してから試してみましょう。

まとめ

  • セルを指定
    • Worksheetオブジェクトに行列名を指定
    • cellメソッドに行列番号を指定
  • セルの読み書き
    • value属性を使う
  • 数式の読み書き
    • イコールから文字列で入力
    • 読み込みはopenpyxl.load_workbook関数のキーワード引数「data_only=True」を指定

関連記事

プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]

【独学】Pythonを学習できる無料&有料教材7選