Excel操作を自動化したいと思ったことはありませんか?
『Excelを仕事で使っているが、毎回同じ単純な操作』
『大量にデータを入力しているが、ミスしそう』
そんな悩みがPythonを使えばほんの一瞬で解決できます。
毎日、日経平均やGAFAMの株価チャートをPythonで出力して
自動でエクセルに貼り付けいている僕が
解説していきます。
【OpenPyXL】PythonでExcel操作を自動化

Excelを操作するPythonのモジュールは多数存在しますが、
僕はOpenPyXLをおすすめします。
理由として、ウェブで公開されている情報が多いからです。
ネットで調べながらプログラムを書く方も多いと思うので
情報が多いに越したことはありません。
OpenPyXLの使い方について以下の内容で解説してきます。
OpenPyXLの使い方
- ①モジュールのインストール
- ②Excelのファイルを読み込む
- ③Excelにデータを書き込む
①モジュールのインストール
まずはモジュールのインストールです。
pip install openpyxlAnacondaを使用している方は最初からインストールされているはずですが、
されてなければpip install openpyxlでインストールしましょう。
②Excelのファイルを読み込む

上のようなExcelファイルを読み込んでいきます。
まずはコード全体を紹介します。
import openpyxl
# ブック取得
directry='C:/Document/メカタナブログ/'
wb = openpyxl.load_workbook(directry+'test.xlsx', data_only=True, keep_vba=False)
# シートを取得
sheet = wb["Sheet1"]
# セルを取得
cell_A1_1 = sheet["A1"].value
cell_A1_2 = sheet.cell(row=1, column=1).value
cell_A1_3 = sheet.cell(1,1).value
cell_A2_1 = sheet["A2"].value
cell_A2_2 = sheet.cell(row=2, column=1).value
cell_A2_3 = sheet.cell(2,1).value
print("cell_A1_1=" + cell_A1_1)
print("cell_A1_2=" + cell_A1_2)
print("cell_A1_3=" + cell_A1_3)
print("cell_A2_1=" + cell_A2_1)
print("cell_A2_2=" + cell_A2_2)
print("cell_A2_3=" + cell_A2_3)import openpyxl
# ブック取得
directry='C:/Document/メカタナブログ/'
wb = openpyxl.load_workbook(directry+'test.xlsx', data_only=True, keep_vba=False)プログラムの先頭にimport openpyxlと記載します。
Excelファイルを読み込むために、対象ファイルが保管されている
ディレクトリをdirectry='C:/Document/メカタナブログ/'で
指定し、'test.xlsx'で対象のファイル名を記載してください。
※ディレクトリは保存されている場所に変更してください。
data_only=TrueはもしExcelファイルに計算式を記入していれば結果を取得します。data_onlyをFalseにすると数式を取得します。
※デフォルトはFalseです。
keep_vba=Trueを記載しないとマクロが保持されません。keep_vbaをFalseにしてブックを開き、そのまま保存するとマクロが消えるので注意しましょう。
※デフォルトはFalseです。
また、マクロが設定されていないファイルをkeep_vba=Trueで読み込んで保存すると
ファイルが壊れて読み込めなくなります。
なのでマクロを設定していればkeep_vba=True
マクロを設定していなければkeep_vba=Falseと記載しましょう。
これで読み込むファイルとシートが指定できたので、
今度はセルの値を取得します。
# セルを取得
cell_A1_1 = sheet["A1"].value
cell_A1_2 = sheet.cell(row=1, column=1).value
cell_A1_3 = sheet.cell(1,1).value
cell_A2_1 = sheet["A2"].value
cell_A2_2 = sheet.cell(row=2, column=1).value
cell_A2_3 = sheet.cell(2,1).value
print("cell_A1_1=" + cell_A1_1)
print("cell_A1_2=" + cell_A1_2)
print("cell_A1_3=" + cell_A1_3)
print("cell_A2_1=" + cell_A2_1)
print("cell_A2_2=" + cell_A2_2)
print("cell_A2_3=" + cell_A2_3)セルの値を取得するには3つの方法があります。
1つ目がsheet["A1"].valueと記載するとA列の1行目を取得します。
一番分かりやすいと思います。
2つ目がsheet.cell(row=1, column=1).valueと記述すれば
何行目の何列の値を取得するように指示できるのでfor文と組み合わせると大量のデータを読み込むこともできます。
※rowは行、columnは列となります。
3つ目は2つ目と似ており、rowとcolumnを取り除けば
大丈夫です。
※僕はどっちが行で列か分からなくなるので、2つ目の
rowとcolumnを記載しています。

A1とA2のセルの値を正しく取得出来たら、
上のような結果になります。
ただ、セルの値をそれぞれ指定して取得は現実的でなないのでfor文を使ってA列を一括取得します。
まずはコード全体を紹介します。
import openpyxl
# ブック取得
directry='C:/Document/メカタナブログ/'
wb = openpyxl.load_workbook(directry+'test.xlsx', data_only=True, keep_vba=False)
# シートを取得
sheet = wb["Sheet1"]
# A列のセルをすべて取得
max_row=sheet.max_row+1
for i in range(1,max_row):
cell_A = sheet.cell(row=i, column=1).value
print("cell_A" + str(i) + "=" + cell_A)先程と被る部分は解説を割愛します。
# A列のセルをすべて取得
max_row=sheet.max_row+1sheet.max_rowと記載すれば値が入力されている最大行を取得します。
※+1はfor文で最後の行まで処理するために記述しています。
for i in range(1,max_row):
cell_A = sheet.cell(row=i, column=1).value
print("cell_A" + str(i) + "=" + cell_A)for i in range(1,max_row):で1行目から値が入力されている最大行まで
同じ処理を繰り返すと宣言します。
例えば、今回は4行まで取得するので、4回同じ処理を実行します。
cell_A = ws.cell(row=i, column=1はA列).valuei行目の値を取得します。

正しく取得出来たら、上のような結果になります。
③Excelにデータを書き込む

読み込みができたら書き込みは簡単です。
Excelのファイルを読み込みと同様にfor文と組み合わせれば大量のデータをExcelに書き込むことができます。
例として先程取り込んだA列の値をB列に書き出します。
import openpyxl
# ブック取得
directry='C:/Document/メカタナブログ/'
wb = openpyxl.load_workbook(directry+'test.xlsx', data_only=True, keep_vba=False)
# シートを取得
sheet = wb["Sheet1"]
# A列のセルをすべて取得後、B列に書き込み
max_row=sheet.max_row+1
for i in range(1,max_row):
cell_A = sheet.cell(row=i, column=1).value
cell_B = sheet.cell(row=i, column=2, value=cell_A)
print("cell_A" + str(i) + "=" + cell_A)
print("cell_B" + str(i) + "=" + cell_B.value)
# 上書き保存
wb.save(directry+"test.xlsx")
sheet.cell(row=i, column=2, value=cell_A)のrowとcolumnに
書き込むセルを指示し、value=で入力する値を記述すれば完了です。
最後にwb.save(directry+"test.xlsx")で上書き保存しています。
また、"test.xlsx"を別ファイル名にすれば別名保存ができます。
今回はOpenPyXLを使ってExcelファイルの読み書きについて
紹介させていただきました。
画像の貼り付けやグラフ作成について別記事で紹介します。
今回は以上です。