Hello World!
「めんどくさいことはプログラムにやらせたい」と思い、Pythonを勉強してます。
エラーが発生すると???となることも多いですが、少しずつPythonが使えるようになってきました。
プログラムで処理すると、チマチマやっていたことが、一瞬で完了します。
うまく動くと、「おおー!これは便利」ってちょっと感激します。
PythonでのExcel作業の自動化の一つ「転記」について書いていきます。
「転記」は、Excel操作で意外と多い作業ではありませんか?
転記は、作業としては単純作業のため、プログラムに置き換えることが可能です。
Excel操作をPythonにやらせると、かなりの時短・効率化に繋がります。
この記事では、Excel「転記」作業の「Excelへのデータの書き込み」について説明します。
転記作業は以下の工程に分解されます。
- 転記するデータがあるファイルを開く
- 転記するデータをコピーする
- 転記先のファイルを開く
- 転記先にデータを書き込むとなります。
この記事では、③〜④の処理について説明します。
①〜②については、こちらの記事を参照ください。

Pythonを使って「転記」が出来ると意外と色々なことが出来るな!と気づきます。
一度プログラムを作成しておけば、以降はプログラム実行のボタン一つで処理始まり、人間よりも圧倒的に速く処理出来るため非常に便利です。
- Pythonで何が出来るか知りたい
- プログラミングを使って日常業務の自動化に興味がある

別記事の「Excelデータの読み込み」と当記事の「Excelデータの書き込み」を組み合わせることで「転記作業の自動化」が可能です。
転記は意外と多い作業のため、Pythonにやらせると効率化が図れますよ!
Pythonで処理・自動化する内容
はじめに作業を分解し、各作業項目について実際に人間が作業する場合どのように作業するかを書き出します。
Pythonのコードを書く場合は、この人間がする作業をそのままの順番でコードを書いていきます。
- 転記するデータが記載されているExcelファイルが保存されているフォルダ(ディレクトリ)を開く
- 転記するデータが保存されているExcelファイルを開く
- 開いたExcelファイルにおいて、転記したい値が記載されているシートを選択する。
- 開いたExcelファイルにおいて、転記したい値が記載されているセル/行を選択する。
- 値をコピーする。
この作業は、①と同じ作業です。
- 転記するデータが記載されているExcelファイルが保存されているフォルダ(ディレクトリ)を開く
- 転記するデータが保存されているExcelファイルを開く
この作業は、ほぼ②と同じです。
- 開いたExcelファイルにおいて、転記したい値が記載されているシートを選択する。
- 開いたExcelファイルにおいて、転記したい値が記載されているセルを選択する。
- 値をコピーする。
*当記事では、STEP3、4について解説します。読み込みの記事でファイルを指定して読み込みました。当記事では、新規Excelファイルを作成し、値を書き込むプログラムを作成・解説します。



このように作業内容を書き出すことは大切です。
いきなりコードを書いてしまいがちですが、何をパソコンに処理させるかを書き出してコード書き始めたほうが効率が良い場合が多いです。
使用するライブラリ・モジュール
ライブラリ・モジュールとは?
モジュールは、Pythonコードをまとめたファイルに過ぎない。
入門Python3 |
・著:Bill Lubannovic ・監訳: 鈴木駿 ・訳:長尾高弘 ・出版:オライリージャパン・ 発売:オーム社
すべてのPythonコードがほかのコードからモジュールとして使えるようになっている。
入門Python3 |
・著:Bill Lubannovic ・監訳: 鈴木駿 ・訳:長尾高弘 ・出版:オライリージャパン・ 発売:オーム社
ライブラリ、モジュールには明確な区別はないようです。いずれもPythonコードのまとまりです。
必要なモジュールをインストール、必要に応じ呼び出す(インポートする)ことができます。作成されたコードを利用出来るため、0から自分でコードを書かずともプログラムを作成することが可能です。



モジュールは、Pythonの道具のようなものと捉えてます。
必要な道具を、道具箱に入れる(インストール)して、使うときに装備(インポート)して使用します。
使用するライブラリ
- Openpyxl
”openpyxl – A Python library to read/write Excel 2010 xlsx/xlsm files”
Openpyxl HP
訳:openpyxl – Excel 2010 の xlsx/xlsm ファイルを読み書きするための Python ライブラリ
拡張子.xlsx, .xlsmエクセルファイルを扱うためのライブラリです。この記事で解説するPythonプログラムはこちらのライブラリのみで実行可能です。
インストールがまだの方は、次のコードを実行してインストールすることでこの記事のコードが実行できるようになります。
- Windows: コマンドプロンプトで次のコードを入力実行してください。
py -m pip install openpyxl
- Mac: コマンドプロンプトで次のコードを入力実行してください。
pip3 install openpyxl
Pythonプログラム:Excelファイルから値の読み込み
Excelファイル
Excelで作成した請求書(ファイル名:sample_invoice.xlsx)を使います。


下記事のプログラムで抽出した以下の辞書を別のExcelファイルに書き込みます。
抽出した辞書: {‘A4’: ‘株式会社 DFR 商事’, ‘N3’: ‘2022−07−09’, ‘D14’: 5500}


Pythonプログラム:Excelファイルへの書き込み
Excelファイルへの書き込み
Openpyxlを使用して、Excelファイルへの書き込みは、3つの方法があります。
それぞれのコード、僕の使い分けを表にまとめました。
書き込み方 | Openpyxl 書き込みコード 書き込み対象シート:ws_wとする。 | 僕の使い分け |
---|---|---|
行単位で書き込み | ws_w. append(リスト) *リストが1行分のデータとなる。 | 書き込み開始行が最下段からの場合 |
セル指定(A1形式) | ws_w[A1形式でセル指定].value = 書き込む値 | 書き込みたいセルが決まっている場合。 A1形式は、感覚的にどの位置のセルかが分かり易い。 |
セル指定(R1C1形式) | ws_w.cell(行番号, 列番号).value = 書き込む値 | ループさせたい場合。 番号指定が可能なため、ループさせる場合の指定が容易。 |
appendは、指定シート最下段のから行単位(行=リスト)で値を書き込みます。 最下段の以外からの書き込み指定は出来きません。
次から具体的なプログラムを解説します。
行単位での書き込み
import openpyxl
#書き込み結果保存先。****はユーザ名となります。
workbook_path_mac = "/Users/****/Desktop/result_w_row.xlsx" # Macの場合
workbook_path_windows = "C:\\Users\\****\Desktop\result_w_row.xlsx" # Windowsの場合
wb_w = openpyxl.Workbook() # 新しいワークブック作成
ws_w = wb_w.active # 選択されているシートを"ws-w"に格納。
# 新規作成のワークブックのため、1シート目となる。
extract_value = {'A4': '株式会社 DFR 商事', 'N3': '2022−07−09', 'D14': 5500}
w_list = list(extract_value.values()) #書き込み対象が辞書であるため、リストへ変換
print(w_list) #変換結果を出力
ws_w.append(w_list) # 書き込み
wb_w.save(workbook_path_mac) # 保存(Macので実行したとします。ファイル名:result_w_row.xlsx)
実行するとExcelファイルがデスクトップに生成され、1行目(新規Excelファイルのため、最下段が1行目)に値が書き込まれます。
Excelファイルを開くと下画像のように1行目に値が書き込まれています。


A1形式でセルを指定して書き込み
import openpyxl
#書き込み結果保存先。****はユーザ名となります。
workbook_path_mac = "/Users/****/Desktop/result_w_row.xlsx" # Macの場合
workbook_path_windows = "C:\\Users\\****\Desktop\result_w_row.xlsx" # Windowsの場合
wb_w = openpyxl.Workbook() # 新しいワークブック作成
ws_w = wb_w.active # 選択されているシートを"ws-w"に格納。
# 新規作成のワークブックのため、1シート目となる。
extract_value = {'A4': '株式会社 DFR 商事', 'N3': '2022−07−09', 'D14': 5500}
ws_w["A1"].value = extract_value["A4"] # A1セルに辞書extract_valueの キー[A4]の値を書き込み
ws_w["B1"].value = extract_value["N3"] # A1セルに辞書extract_valueの キー[N3]の値を書き込み
ws_w["C1"].value = extract_value["D14"] # A1セルに辞書extract_valueの キー[D14]の値を書き込み
wb_w.save(workbook_path_mac) # 保存(Macので実行したとします。ファイル名:result_w_row.xlsx)
実行するとデスクトップExcelファイルが生成され、A1、B1、C1セルに値が書き込まれます。
ファイル内容は、行単位での書き込みの場合と同一です。
R1C1形式でセルを指定して書き込み
import openpyxl
#書き込み結果保存先。****はユーザ名となります。
workbook_path_mac = "/Users/****/Desktop/result_w_row.xlsx" # Macの場合
workbook_path_windows = "C:\\Users\\****\Desktop\result_w_row.xlsx" # Windowsの場合
wb_w = openpyxl.Workbook() # 新しいワークブック作成
ws_w = wb_w.active # 選択されているシートを"ws-w"に格納。
# 新規作成のワークブックのため、1シート目となる。
extract_value = {'A4': '株式会社 DFR 商事', 'N3': '2022−07−09', 'D14': 5500}
'''
行番号は1行目で変更なし。
列番号が1つづつズレていきます。
列番号を変数colum_numとして値を書き込む度に1加算し、次の値の書き込み時には、1列づつずらしていきます。
'''
column_num = 1
for value in extract_value.values(): # 辞書extract_valueの値をループする。
ws_w.cell(1, column_num).value = value # 1行目、colum_numで指定したセルに値を書き込み
column_num += 1 # colum_numの値に1加算する。
wb_w.save(workbook_path_mac) # 保存(Macので実行したとします。ファイル名:result_w_row.xlsx)
実行するとデスクトップにExcelファイルが生成され、1行目、1〜3列目のセルに値が書き込まれます。
ファイル内容は、行単位での書き込みの場合と同一です。
まとめ
今回は、PythonのOpenpyxlを使用したExcelファイルへの書き込みについて書きました。
別記事の読み込みと合わせることで、Pythonを使って転記作業を自動化することはが出来ます。
日々の仕事の中で「転記」作業は意外と多く、プログラムで自動化すると、圧倒的に速く、正確に処理できます。
また、「もっと手間を省きたい!」→「この作業もPythonにやらせられないか?」の思考になり、仕事に対する見方が変わります。
当記事の内容が役立てば幸いです。
最後まで読んでいただきありがとうございました。
コメント