PythonでのExcelの操作方法4つ|マクロ作成で使えるパッケージも紹介

エンジニア
マネージャー
PythonでExcelを操作する2つの方法とは?
ここではPythonでExcelを操作するための2つのライブラリについて説明します。xlsxのファイルを直接編集するものとExcelをWin32 APIを通して扱うものです。
様々なライブラリが存在しますが、openpyxlとpywin32に焦点をあてて説明します。
openpyxlの特徴
Excelのxlsx/xlsm/xltx/xltm(Office Open XML)形式のファイルを操作するためのライブラリです。xlsx/xlsm/xltx/xltm形式のファイルを直接操作するため、Excel本体が無い場合でも作成したアプリケーションが実行可能です。
pywin32の特徴
Win32 API経由でExcelを操作するためのライブラリです。PythonからExcel本体を操作するためExcel本体が必須となります。
Access-VBAからExcelを操作するプログラムの作成経験がある方には、Excelを操作しているコードはそれほど違和感がないかもしれません。
PythonでのExcelの操作方法4つ
今回は、Pythonからopenpyxlを使用したExcelの扱い方について説明します。ここでは、ワークブック、ワークシート、セル、グラフについて紹介します。
PythonでExcelを扱うには事前にopenpyxlをインストールしてください。
1 |
pip install openpyxl |
1:ワークブック
Pythonでのワークブックの扱い方について紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 |
import openpyxl # workbookの新規作成 workbook = openpyxl.Workbook() # workbookの保存 workbook.save('python.xlsx') |
実行すると、カレントディレクトリに「python.xlsx」という名前のExcelファイルが作成されます。Excelで開いて確認してみてください。
1 2 3 4 5 6 7 8 9 |
import openpyxl # workbookを開く workbook = openpyxl.load_workbook("python.xlsx") # workbookを別名保存 workbook.save('python2.xlsx') |
実行すると、カレントディレクトリに「python2.xlsx」という名前のExcelファイルが作成されます。
2:ワークシート
PythonでのExcelのワークシートの扱い方について紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import openpyxl # workbookを開く workbook = openpyxl.Workbook() ######################## ### 全シート名を表示 ### ######################## print(workbook.sheetnames) # ['Sheet'] ############################## ### シートの取得、名前変更 ### ############################## print('シートの取得、名前変更') # シートを取得 worksheet = workbook.active # シート名を表示 print(worksheet.title) # Sheet # シートインデックス(先頭のシートは0)を表示 print(workbook.index(worksheet)) # 0 # シート名を変更 worksheet.title = 'mysheet1' # シート名を表示 print(worksheet.title) # mysheet1 #################### ### シートの追加 ### #################### print('シートの追加') # シート追加 worksheet3 = workbook.create_sheet(title="mysheet3") # 全シート名を表示 print(workbook.sheetnames) # ['mysheet1', 'mysheet3'] # シート追加(指定indexに追加) worksheet3 = workbook.create_sheet(title="mysheet2", index=1) # 全シート名を表示 print(workbook.sheetnames) # ['mysheet1', 'mysheet2', 'mysheet3'] # シートの取得 worksheet = workbook["mysheet2"] # シート名を表示 print(worksheet.title) # mysheet2 # シートの取得 worksheet = workbook.worksheets[2] # シート名を表示 print(worksheet.title) # mysheet3 ###################### ### シートのコピー ### ###################### print('シートのコピー') # シートコピー worksheet = workbook.copy_worksheet(workbook["mysheet2"]) # 全シート名を表示 print(workbook.sheetnames) # ['mysheet1', 'mysheet2', 'mysheet3', 'mysheet2 Copy'] #################### ### シートの削除 ### #################### # シートを取得 worksheet = workbook.worksheets[3] # シートを削除 workbook.remove(worksheet) # 全シート名を表示 print(workbook.sheetnames) # ['mysheet1', 'mysheet2', 'mysheet3'] |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
['Sheet'] シートの取得、名前変更 Sheet 0 mysheet1 シートの追加 ['mysheet1', 'mysheet3'] ['mysheet1', 'mysheet2', 'mysheet3'] mysheet2 mysheet3 シートのコピー ['mysheet1', 'mysheet2', 'mysheet3', 'mysheet2 Copy'] ['mysheet1', 'mysheet2', 'mysheet3'] |
3:セル
PythonでのExcelのセルの扱い方について紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import openpyxl # workbookを開き、シートを選択 workbook = openpyxl.Workbook() worksheet = workbook.active ###################### ### セルの読み書き ### ###################### # A1セルを取得 cell = worksheet["A1"] # A1セルの値設定 cell.value = 100 # A1セルの値表示 print(cell.value) # 100 ############################ ### セルの読み書き(範囲) ### ############################ # 範囲を指定してセルを取得する cells = worksheet['A1':'C3'] i = 0 for row in cells: for cell in row: cell.value = i print('[' + cell.coordinate + '] : ' + str(cell.value)) i += 1 ########################## ### セルの数式書き込み ### ########################## cell = worksheet["D1"] cell.value = "=SUM(A1:C3)" print(cell.value) # =SUM(A1:C3) |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
100 [A1] : 0 [B1] : 1 [C1] : 2 [A2] : 3 [B2] : 4 [C2] : 5 [A3] : 6 [B3] : 7 [C3] : 8 =SUM(A1:C3) |
数式の「計算結果」を取得したい場合は、load_workbookの引数に「data_only=True」を指定してください。ただし、計算はExcelが行うため、事前にエクセルで開いておかなければ「計算結果」は取得できません。
4:グラフ
PythonでのExcelのグラフの扱い方について紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import openpyxl # workbookを開き、シートを選択 workbook = openpyxl.Workbook() worksheet = workbook.active # 値の設定 cells = worksheet['A1':'A10'] i = 1 for row in cells: for cell in row: cell.value = i i += 1 # グラフの作成 from openpyxl.chart import BarChart, Reference, Series values = Reference(worksheet, min_col=1, min_row=1, max_col=1, max_row=10) chart = BarChart() chart.add_data(values) worksheet.add_chart(chart, "C1") # workbookの保存 workbook.save("python.xlsx") |
保存したExcelを開くと、Pythonで作成したグラフが表示されていることが分かります。
Pythonではマクロの作成も可能
VBAからPythonのコードを記述した.pyファイルを実行することができます。
たとえば外部パッケージのxlwingsを導入することにより、ボタンのマクロの登録メニューからPythonのプログラムを呼び出したり、ユーザー定義関数 (UDF)を作成してワークシート関数として使用したりすることもできます。
Pythonでマクロを作成するメリット3つ
Pythonでマクロを作成することには以下のメリットがあります。
・Pythonでの複雑な処理の必要がありません。
VBAとPython各々に適した機能を使用するように実装することができます。
・簡単な記述で作成できます。
Python用に公開されているライブラリを使用することにより、複雑な処理も容易に使用することができます。
・アプリケーションを超えた処理が可能です。
Pythonでそれぞれの処理に適した複数のアプリケーションを連携させることができます。
1:Pythonでの複雑な処理の必要がない
Pythonでマクロを作成することは可能ですが、全てをPython側で行う必要はありません。VBAにはVBAの得意な処理があり、各々が得意な分野の処理を実行するように切り分けて実装することができます。
2:簡単な記述で作成できる
外部アプリケーションを使用する場合、VBAでも操作するプログラムは公開されているAPIを使用することで可能ですが、Python用に公開されているライブラリも多く、また使用も容易です。
たとえば、PyAutoGUIの例で記述している
1 2 3 |
p= pa.locateOnScreen("btn.PNG", confidence=0.9) |
は内部でOpenCV(Open Source Computer Vision Library)を使用して画像認識を行っています。
VBAで同様の処理を行う場合は、VBAで使用可能なOpenCVを使用した画像認識用のDLLを作成し、それを使って画像認識のためのプログラムを作成する必要があります。
3:アプリケーションを超えた処理が可能である
先述のとおり、Python用のライブラリが公開されているアプリケーションは数多く存在します。Pythonから目的に応じたアプリケーションを組み合わせて使用できます。
Webスクレイピングを実行して、結果をデータベースに書き込むという処理もPythonのプログラムのみで実装できます。
Pythonでのマクロ作成に活用できるパッケージ4つ
Pythonでマクロ作成に活用できるパッケージとして、今回は以下の4つについて説明します。
・PyAutoGUI:PythonでGUI操作の自動化を行うためのパッケージです。
・CSV:PythonでCSVファイルの読み込みや書き込みを行うための標準ライブラリです。
・python-docx:PythonでWordのDocumentの処理を行う外部パッケージです。
・PDFMiner.six:PythonでPDFの処理を行う外部パッケージです。
それぞれ以下でインストールして下さい。
1 2 3 |
pip install PyAutoGUI pip install python-docx pip install PDFMiner.six |
PyAutoGUIのサンプルを実行する場合、パッケージの追加を要求した場合、それに従って追加インストールしてください。
1:PyAutoGUI
PyAutoGUIとはMicrosoft Power Automate Desktopのようにマウスのクリックやキーボード入力などを自動化するためのPythonのパッケージです。
事前にExcelのWorksheet上のボタンの座標もしくは画像を取得しておき、Pythonのプログラムを実行すると、順次指定されたボタンを順次押下して処理を継続していくことができます。
Worksheet上のボタン1の画像のスクリーンショット[“btn.PNG”]の座標を取得してボタンを押下するためには以下の様に行います。
1 2 3 4 5 6 7 8 9 10 |
import pyautogui as pa # "btn.PNG":Worksheet上のボタン1の画像のスクリーンショット # 画像認識でアドレスを取得している p= pa.locateOnScreen("btn.PNG", confidence=0.9) #画像認識で取得した座標をクリック pa.click(p, button='left', clicks=2) |
2:Python標準ライブラリ:CSV
CSVファイルの読み込みや書き込みを行うPythonの標準ライブラリです。CSVファイルの読み込みは以下の様に行います。
1 2 3 4 5 6 7 8 9 |
import csv with open(csvファイル名, newline='', encoding = 'shift_jis') as rdcsv: # CSVファイルの読み込み rdline = csv.reader(rdcsv, delimiter=',', quotechar='"') for line in rdline: ~ |
また、データを読み込んで分析を行う場合にはpandas.read_csvを使用することも可能です。
3:python-docx
PythonでWordのDocumentの処理を行う外部パッケージの一つです。Wordのファイルの読み込みは以下の様に行います。
1 2 3 4 5 6 7 8 9 |
import docx import os.path wdfile = os.path.abspath(".") + "/サンプル.docx" # Word文書の読み込み doc = docx.Document(wdfile) ~ |
4:PDFMiner.six
PythonでPDFの処理を行う外部パッケージの一つです。PDFのファイルを読み込んで含まれているテキストファイルの出力は以下の様に行います。
1 2 3 4 5 6 7 8 9 |
from pdfminer.high_level import extract_text import os.path pdfile = open(os.path.abspath(".") + "/Welcome.pdf", 'rb') # 指定したPDFファイルよりテキストを抽出 text = extract_text(pdfile) print(text) |
エンジニア
マネージャー
PythonでExcelを操作してみよう
Microsoft Office等を操作するプログラムはVBAのみでコードの記述が可能な部分もありますが、Pythonを併用することにより、より効率的なコードを記述することが可能です。
ここまで述べていたライブラリには、上記で説明した以外にも様々な機能があります。まずは評価してみてはいかがでしょうか。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)