Pythonでマクロも実行可能!.xlsmファイルを超簡単に操作する方法

Excel

こんにちは!ゆーや(@yuyamanm118712)です。

Excelファイルには多くの種類がありますが、その中でも特に「.xlsm」ファイルはマクロ機能を含む特別な形式です。Pythonでこのようなファイルを操作するには、「openpyxl」や「xlwings」といったライブラリを使う方法が一般的です。

本記事では、それぞれのライブラリの特徴や使い方、そして使い分けについて説明します。

.xlsmファイルとは?

まず、「.xlsm」ファイルについて簡単に説明します。これはマクロが含まれるExcelファイルの形式で、通常の「.xlsx」との違いは、VBA(Visual Basic for Applications)というプログラミング言語で記述されたマクロが使える点です。このマクロを自動的に実行することで、Excel上で複雑な処理を簡単に行うことができます。

Pythonでこのファイル形式を操作するには、マクロの存在を意識したライブラリ選びが重要です。ここで、「openpyxl」と「xlwings」が有効な選択肢となります。

openpyxlでの操作

openpyxlは、PythonでExcelファイル(.xlsx形式)を操作するための最も一般的なライブラリの一つです。ただし、openpyxlには「マクロを実行する機能」がありません。そのため、.xlsmファイルを操作する場合、マクロを無視するか、マクロを含まないセルのデータ操作に限定されます。

ゆーや
ゆーや

もし、openpyxlをインストールしていない方は

次の記事を読めば、簡単にインストールできるよ!

基本的な使い方

以下は、openpyxlを使って.xlsmファイルを読み込んでデータを操作する基本的なコードです。

import openpyxl

# .xlsmファイルを読み込む
wb = openpyxl.load_workbook('マクロあり.xlsm', keep_vba=True)

# シートを選択
ws = wb.active

# データの読み込み
print(ws['A1'].value)

# セルの値を変更
ws['A1'] = 'マクロありファイルにopenpyxlでアクセスできました!'

# ファイルを保存
wb.save('マクロあり.xlsm')

実行前の「マクロあり.xlsm」

実行後の「マクロあり.xlsm」

ゆーや
ゆーや

openpyxlでも.xlsmファイルの読み書きはできそうだね!

ソースのポイント

  • keep_vba=Trueを指定することで、マクロが削除されるのを防ぎます。
  • セルのデータの読み書きは通常のExcelファイルと同じ方法で行えますが、マクロの実行や操作はできません
ゆーや
ゆーや

openpyxlの強みは、単純なデータ操作やファイル作成が軽量で行える点です。一方で、マクロが必要な場合や、ExcelのGUI部分に対する高度な操作が求められる場合には限界があります。

xlwingsでの操作

xlwingsは、ExcelのCOMオブジェクトモデルをPythonから操作するためのライブラリで、Excelアプリケーション自体を制御できます。このため、マクロの実行やExcelの完全な操作が可能です。

基本的な使い方

以下は、xlwingsを使って.xlsmファイルを開き、マクロを実行する例です。

import xlwings as xw

# Excelファイルを開く
wb = xw.Book('マクロあり.xlsm')

# シートを選択
sheet = wb.sheets['Sheet1']

# データの読み込み
print(sheet.range('A1').value)

# セルの値を変更
sheet.range('A1').value = 'マクロが動いたみたい'

# マクロを実行
macro = wb.macro('xlwingsが呼んでいる')
macro()

# ファイルを保存
wb.save('マクロあり.xlsm')

# ファイルを閉じる
wb.close()

仕込んだマクロ

ゆーや
ゆーや

VBAというExcel用の言語をつかって書いているよ!

実行結果

ゆーや
ゆーや

きちんとマクロが動いていることがわかるね!

xlwingsの強みは、マクロの実行やExcelの細かな操作が可能であることです。さらに、Excelのウィンドウを表示した状態で操作できるため、デバッグや手動での確認も容易です。一方、Excelアプリケーション自体が起動するため、操作の速度はopenpyxlに比べて遅くなりがちです。

openpyxlとxlwingsの使い分け

それでは、どのようにこれら2つのライブラリを使い分けるべきでしょうか?

  • データの操作がメインで、マクロを実行する必要がない場合は、openpyxlを選ぶのが良いでしょう。openpyxlは軽量で、Excelを起動する必要がないため、スクリプトの実行速度が速くなります。
  • マクロの実行やExcelの細かい操作が必要な場合は、xlwingsを使うのが最適です。例えば、複雑な自動処理が含まれる.xlsmファイルを操作したい場合、xlwingsでExcelを制御しながらマクロを呼び出すことができます。

まとめ

Pythonで.xlsmファイルを操作する際には、openpyxlとxlwingsという2つの強力なライブラリが存在します。それぞれの特徴を理解し、用途に応じて使い分けることで、効率的に作業を進めることができます。マクロの実行が必要ない場合はopenpyxlを、必要な場合はxlwingsを選ぶと良いでしょう。

どちらのライブラリもPythonからExcelを操作する強力なツールです。ぜひ、適切な場面で活用して、Excelの自動化や効率化を進めてみてください。

コメント

タイトルとURLをコピーしました