Excel操作を自動化したいと思ったことはありませんか?
『Excelを仕事で使っているが、毎回同じ単純な操作』
『大量にデータを入力しているが、ミスしそう』
そんな悩みがPythonを使えばほんの一瞬で解決できます。
毎日、日経平均やGAFAMの株価チャートをPythonで出力して
自動でエクセルに貼り付けいている僕が
解説していきます。
【OpenPyXL】PythonでExcel操作を自動化
Excelを操作するPythonのモジュールは多数存在しますが、
僕はOpenPyXLをおすすめします。
理由として、ウェブで公開されている情報が多いからです。
ネットで調べながらプログラムを書く方も多いと思うので
情報が多いに越したことはありません。
OpenPyXLの使い方について以下の内容で解説してきます。
OpenPyXLの使い方
- ①モジュールのインストール
- ②Excelのファイルを読み込む
- ③Excelにデータを書き込む
①モジュールのインストール
まずはモジュールのインストールです。
pip install openpyxl
Anacondaを使用している方は最初からインストールされているはずですが、
されてなければ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+1
sheet.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ファイルの読み書きについて
紹介させていただきました。
画像の貼り付けやグラフ作成について別記事で紹介します。
今回は以上です。