KOSEN{BLOG}について

仕事を効率よくしませんか?Pythonで「Excel作業」を自動化

事務作業で退屈している皆さん!

同じことの繰り返し、この退屈な作業嫌だなーと思ったことはありませんか?

それ、Pythonにやらせてみません?

ルーチンワーク化しているExcel作業自動化してみたいという方向けに書いています。

Excelのなにを自動化できるのか?

事務系OL

Excelの自動化ってなにができるの?
例えば、コピペ作業とかですかね、ほかのファイルやシステムにデータを一つ一つコピペしていくのってめんどくないです?

こうせ

事務系OL

確かに、少なかったらいいけど多かったらなかなかにだるい。笑
なら、それPythonにやらせてみようよ

こうせ

Pythonからコピペ作業などするためのExcel操作を自動化していきましょう。

自動化するためには「openpyxl」というライブラリを使用します。

この「openpyxl」の使い方を本記事では解説していきます。

Pythonとは? 環境構築をしよう

Windows版の環境構築は以下の記事を参考にしてみてください

Python環境構築-VScode-win10

Colaboratoryを使ってめんどくさい環境構築をしない方法もあります。

しかし、デメリットもあります。

それはChromeでやるため1回1回ファイルをアップロードしないといけないことです。

Colaboratoryで行いたいならスプレッドシートを使うという

以下の記事を参考にしてみてください

環境構築がいらない!?Colaboratoryを使ってPython動かしてみた 【Python】仕事を効率よくしませんか? Colaboratoryで「スプレッドシート操作」を自動化

Excelを操作しよう

Pythonの環境構築ができたら早速Excelを動かしていきましょう。

っとその前に「openpyxl」をインストールしよう!

openpyxlのインストール

「pip」というものを使ってインストールします。

コマンドラインツール(Windowsはコマンドプロンプト、Macはターミナル)を開いて、下記コマンドを実行するとインストールできます。

pip install openpyxl

インストールできたら「openpyxl」というライブラリが使えるようになりました。

では「main.py」というファイルを作成しコードを記述していきましょう。

まず冒頭に以下の文を書きましょう。

import openpyxl
# 以下でExcel操作を自動化する処理を書いていく

この文を書くことでライブラリを読み込めます。

注意
以降「openpyxl」を読み込み済みとして進めていきます。

忘れないようにしてください。

Excelファイルを読み込む

今回使うExcelは「main」という名前で保存してます。

「load_workbook」というメソッドの引数にExcelファイルのパスを指定するとそのファイルを操作できるようになります。

パスとは、そのファイルの場所を示すものです。
(以下では「auto_excel」というフォルダの中の「main.xlsx」を指定しています。)

「sheetnames」というプロパティを使うとワークシート名がリスト形式で取得できます。

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
print(wb.sheetnames)

#実行結果
['Sheet1', 'Sheet2', 'Sheet3']

これから操作の仕方を紹介していきますね

ワークシートの操作

ワークシートの名前変更

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#シートを指定
ws = wb['Sheet1']
#シートの名前を変更
ws.title = 'newSheet'

シート名を変更は「Worksheet」オブジェクトの「title」プロパティでできます。

ワークシートを追加する

wb = openpyxl.load_workbook('auto_excel\main.xlsx')

#シートの追加(シートの名前,挿入する位置)
ws1 = wb.create_sheet('NewSheet', 0)

シートの追加は「Workbook」オブジェクトの「create_sheet」メソッドで追加できます。

一つ目の引数にシート名、二つ目の引数に挿入する位置を指定できます。

引数の指定はどちらも任意なので指定しなくても大丈夫です。

ワークシートのコピー

wb = openpyxl.load_workbook('auto_excel\main.xlsx')

#シートのコピー
ws2 = wb['Sheet1']
ws3 = wb.copy_worksheet(ws2)

シートのコピーは「Workbook」オブジェクトの「copy_worksheet」メソッドでコピーできます。

コピーしたい「Worksheet」オブジェクトを引数に指定するだけです。

ワークシートの削除

wb = openpyxl.load_workbook('auto_excel\main.xlsx')

#シートの削除
ws4 = wb['Sheet3']
wb.remove(ws4)

シート削除は「Workbook」オブジェクトの「remove」メソッドでできます。

削除したい「Worksheet」オブジェクトを引数に指定するだけです。

セルの操作

1つのセルの操作

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
#指定方法1
ws = wb['Sheet1']
cell1 = ws['A1']
cell1.value = '123'
#指定方法2 cell2 = ws.cell(row=1, column=1, value='123')

セルの指定方法は2つあります。

上記は両方とも「Sheet1」の「A1」というセルに「123」という値を入れています。

2の方法は「while文」などに便利です。

「row」は行「column」は列を指定できます。

複数のセルの操作

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
cell1 = ws['A1':'C3']

# 行単位で指定
row = ws[5]
rows = ws[5:10]

# 列単位で指定
col = ws['A']
cols = ws['A':'C']

複数のセルを指定しましたが、このままでは操作できないので

「for文」を使って操作します。

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
rows = ws['A1':'C3']

for row in rows:
    for cell in row:
        print(cell.value)

これでセルの値を取得できます。

Excelファイルの保存

wb = openpyxl.load_workbook('auto_excel\main.xlsx')

#新規ファイル
wb.save('auto_excel\main2.xlsx')

#上書き保存
wb.save('auto_excel\main.xlsx')

「Workbook」オブジェクトの「save」メソッドに保存先パスを指ましょう

上書き保存の際は同じパスを指定しましょう。

ちょっとした参考コード

import openpyxl

list = [1,2,3,4,5,6,7,8,9]

wb = openpyxl.load_workbook('auto_excel\main.xlsx')
ws = wb['Sheet1']
num = 0

while num < len(list):

    ws.cell(row=num+1, column=1).value = list[num]
    num += 1

wb.save('auto_excel\main.xlsx')

先ほどチラッといった「while文」を使って操作しました。

listという配列の中をA1~A9までに順番に入れるという簡単なコードです。

次はlistの中を書き込むのではなくlistの中にExcelの値を入れ込んでみたり、ワークシートのコピーを大量に作ってみたり

色々遊んでみてください。

listの中身をほかのファイルからとってくるなどかなり幅は広げれますよー

さいごに

Excelの値を取り出し、Pythonで値を編集してほかのファイルに張り付けたり

PythonでWebスクレイピングなどしてその値をExcelに入力したりと

できることはたくさんあります!

もっと詳しく勉強していけばより高度なこともできるでしょう。

詳しくは以下の書籍など参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です