xlwingsの使い方、特にワークブック関連について解説します。
xlwingsはVBAライクでエクセルを使うPythonのライブラリ(コード集)です。
VBAユーザーが使いたいPythonライブラリはいくつかありますが、
VBAに慣れている方が一番使いやすいのはxlwingsだと思います。
VBAのように実際に画面上でエクセルが動いているのがわかるので、VBAを使っているような感覚で操作できます。
くわしくはこちら

VBAユーザーがPythonを学習する理由はこちら

Pythonを学ぶための方法はこちら
プログラミングスクールとなっていますが、それ以外にも安価で学ぶ方法も紹介しています。

xlwingsとは
xlwingsは、PythonからMicrosoft Excelを操作したり、逆にExcelからPythonのコードを実行したりするためのオープンソースのライブラリです。
主な特徴は以下のとおりです。
- PythonとExcelの双方向連携
- PythonからExcelのブックやシート、セルの操作、書式設定、グラフの操作などの操作ができます。
- Excelにボタンを設置し、Pythonで作成した関数(UDF: ユーザー定義関数)を呼び出して実行できます。
- Excelの操作
- 実際にExcelを自動操作し、データの入出力、保存、新規作成などが可能です。
- VBAで処理するようにExcelを使うことができます。
- Pythonの強力なライブラリとの連携
- pandasやNumPyなどのPythonのデータ分析ライブラリと連携し、高度なデータ処理や分析をExcel上で行えます。
- pandas:データ処理
- Numpy:数学処理
- request,selenium:スクレイピング(インターネットからの情報処理)
xlwingsを使うための準備
VBAユーザー向けにxlwingsを使うための準備を解説します。
Pythonのインストール
Pythonダウロード先はこちら
公式のダウンロードサイトです。

2025/3/5時点では、バージョンが3.13.2となっています。
「Download Python ○○」のボタンをクリックすると、ダウンロードができます。
ダウンロードされたファイルを開いて適切にインストールすればOKです。
インストールについては、別記事で解説します。
オンライン上でPythonを動かす方法もありますが、できれば自身のPCにインストールすることをお勧めします。
オフライン上でも動かせておく方が良いためです。
外出先でネット接続が遅い場合も対応できるし、オンライン上で扱うのがためらわれるようなデータを動かすこともできるので。
やってみると意外と簡単です
エディタのインストール

次にエディタのインストールです。
VBAでいうところの、Alt+F11で出てくる、「あれ」、です。
「あれ」をもっと使いやすく機能の充実したものを想像してください。
いろいろと選択肢があると思いますが、
特にこだわりがなければVSコードでいいと思います。
VBAのエディタに慣れていると、結構びっくりすることがいっぱいありますよ。
ざっくりですが、VBA使いからすると以下の点が優れているように思います。
- インテリセンスがすごい
関数・メソッドの説明が充実している(どうやって使うんだっけ?がほとんど解消されることも多い) - ショートカットキーが充実
コメント化、タブ、コピー、削除…etc - 変数の検索がめちゃくちゃ楽(マウスを置くだけで、同じ変数がどこにあるかわかる)
- タブ・ネストがわかりやすい(どこまでfor文、if文がかかっている一発でわかる)
- インタラクティブなコーディングが可能
短いコードを書いては試して…を繰り返してコーディングできる
インストール方法
VSコードのダウンロード公式サイトから
ダウンロードしてください。
こちらもWindows向けの説明をさせていただきます。

Windowsと大きく表示されたボタンをクリックしてください。
ダウンロードが開始されます。
インストールについては別記事で説明さえてください。
近日書き上げます。。
AIコードアシストをインストールする(任意)
AIを使った方がコーディングは楽になるので、できればやったほうがいいですが、別に必須ではないです。
別にブラウザからChatGPTやgeminiに聞いてコピペしてもいいですしね。
私も結構そうやっています。
geminiのAIアシストをインストールしてためしてみようと思うので、
そこも記事にします。。。
書く記事がいっぱいだな。。
xlwingsのインストール
Pythonをインストールしているとpipもインストールできていると思うので、それを使ってxlwingsのライブラリをインストールします。
私の場合windowsを使っているのwindowsでxlwingsをインストールする方法を記載します。

コマンドプロンプトを開いたら下記のコードを入力してください
pip install xlwings

もし、pipをアップグレードしてください的なコメントが出たら、下記のコマンドを入力してpipを最新のものにしてください。
python -m pip install --upgrade pip
xlwingsを使うにはimportが必要
Python、xlwingsの準備ができたので、実際に使用するための方法ですが、
書き方は以下の通りです。
import xlwings as xw
このコードを必ず書き込むようにしてください。
このコードの意味は
「xlwings」というライブラリ(コードの塊、このコードを使ってエクセルを動かす)を取り込みますよという意味です。
「xlwings」だと、長すぎて使いづらいので「xw」という短い文字で対応させています。
これが「as xw」の部分です。
例えば、ブックを開くときは「xw.Book()」というコードでブックを開く動作を行います。
ブックを開く xw.Book(パス名)
VBA
①相対パスで開く
Sub openBook()
Dim filePath As String
Dim wb As Workbook
'相対パス
filePath = ThisWorkbook.Path & "\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
End Sub
②絶対パスで開く
Sub openBook()
Dim filePath As String
Dim wb As Workbook
'絶対パス
filePath = "C:\Users\hokky\Documents\マクロ\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
End Sub
Python
xw.Book(パス名)
①相対パスで開く
import xlwings as xw
# 相対パス
# カレントディレクトリ(現在のフォルダ)は
print(os.getcwd())
# c:\Users\hokky\Documents\MyPython\excel操作
relative_path = "テスト.xlsx"
wb = xw.Book(relative_path)
②絶対パスで開く
import xlwings as xw
# 絶対パス
absolute_path = r"c:\Users\hokky\Documents\MyPython\excel操作\テスト.xlsx"
wb = xw.Book(absolute_path)
私がPythonのプログラミング学習を始めたときに最初に躓いた点のひとつですが、
パス名の前の「r」について解説します。
マジでこれがわからず丸一日時間をかけたことがあります。
Pythonにおける文字列の先頭に付加するr
は、その文字列を「raw文字列」として扱うことを意味します。
通常Pythonでの文字列の扱いとして、「バックスラッシュ」(うまく表示されないですが、「/」を反転させた形)として処理されます。
この「バックスラッシュ」はエスケープシーケンスという特別な役割があり、「バックスラッシュ+n」で改行などを表します。
先頭にrをつけていない文字列は「バックスラッシュ」をエスケープシーケンスとして読み、正しく、絶対パスであることを読み込んでくれなくなります。
「バックスラッシュ」が含まれる文字列を扱う場合は先頭に「r」をつけるようにしましょう。
新規ブックを作成 xw.Book()
VBA
Sub CreateNewWorkbook()
Dim wb As Workbook
' 新規ブックを作成
Set wb = Workbooks.Add
End Sub
Python
xw.Book()
※()内は空白
import xlwings as xw
# 新規ブックの作成
wb = xw.Book()
ブックの上書き保存 wb.save()
VBA
Sub SaveBook()
Dim wb As Workbook
Dim filePath As String
filePath = ThisWorkbook.Path & "\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
wb.Worksheets(1).Cells(1, 1).Value = "更新"
wb.Save
End Sub
Python
wb.save()
デフォルト(引数で指定しない)
保存先はカレントディレクト(通常はプログラムが保存されているフォルダ)
ブック名は初期設定値(多くの場合Book1)
import xlwings as xw
wb = xw.Book("テスト2.xlsx")
# 上書き保存も可能
wb.sheets[0].range("A1").value = "更新"
# wb.save("テスト2.xlsx")と打っても結果は同じ
wb.save()
名前を付けて保存 wb.save(ファイル名)
VBA
Sub SaveAsBook()
Dim wb As Workbook
Dim filePath As String
filePath = ThisWorkbook.Path & "\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
wb.Worksheets(1).Cells(1, 1).Value = "更新"
Dim newFilePath As String
newFilePath = ThisWorkbook.Path & "\テスト2.xlsx"
wb.SaveAs (newFilePath)
End Sub
Python
wb.save(新規ファイル名)
import xlwings as xw
wb = xw.Book("テスト2.xlsx")
# 上書き保存も可能
wb.sheets[0].range("A1").value = "更新"
# 絶対パスでもOK
wb.save("テスト3.xlsx")
ブックを閉じる wb.close()
VBA
Sub CloseBook()
Dim wb As Workbook
Dim filePath As String
filePath = ThisWorkbook.Path & "\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
wb.Worksheets(1).Cells(1, 1).Value = "更新"
'シートが更新されているのに保存前に閉じようとすると、保存するかどうかを尋ねるダイアログボックスが出ます。
wb.Close
'SaveChanges引数でTreuに指定すると、保存して閉じます。
wb.Close SaveChanges:=True
'Falseの場合は保存しないで(「更新」という文字列が入らないで)閉じます。
wb.Close SaveChanges:=False
End Sub
Python
wb.close()
import xlwings as xw
wb = xw.Book("テスト.xlsx")
wb.sheets[0].range("A1").value = "更新"
# Close()メソッドには引数はありません
# 保存(save)前にCloseメソッドで閉じると内容が保存されないまま閉じることになるので注意が必要です。
wb.close()
# wb.save()を使って保存する癖をつけましょう
注意点です。
ブックのプロパティ操作
ブックの名前取得 wb.name
VBA
Sub BookName()
Dim wb As Workbook
Dim filePath As String
filePath = ThisWorkbook.Path & "\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
'ファイル名を取得
Debug.Print wb.Name
'>>>テスト.xlsx
End Sub
Python
wb.name
import xlwings as xw
wb = xw.Book("テスト.xlsx")
# ブック名を取得
book_name = wb.name
print(book_name)
#>>>テスト.xlsx
ブックの保存されているフォルダパス取得 os.path.dirname(wb.fullname)
ファイルが保存されているフォルダ名までのパスの取得です。
VBA
Sub BookFilePath()
Dim wb As Workbook
Dim filePath As String
'C:\Users\hokky\Documents\マクロ\テスト.xlsx
filePath = "C:\Users\hokky\Documents\マクロ\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
Dim BookPath As String
BookPath = wb.Path
Debug.Print BookPath
'>>>C:\Users\hokky\Documents\マクロ
End Sub
Python
import xlwings as xw
import os
file_path = r"C:\Users\hokky\Documents\MyPython\excel操作\テスト.xlsx"
wb = xw.Book(file_path)
dir_path = os.path.dirname(wb.fullname)
print(dir_path)
#>>>C:\Users\hokky\Documents\MyPython\excel操作
ブックのファイル名も含めたフルパス取得 wb.fullname
ブック名を含めたフォルダパス+ファイル名の取得です。
VBA
以下のようにエクセルファイルのある場所が
Users>hokky>Documents>マクロ
そのフォルダ内にある「テスト.xlsx」というファイルのフルパスを取得するコードです。

Sub BookFullName()
Dim wb As Workbook
Dim filePath As String
'C:\Users\hokky\Documents\マクロ\テスト.xlsx
filePath = "C:\Users\hokky\Documents\マクロ\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
Dim FullName As String
FullName = wb.FullName
Debug.Print FullName
'>>>C:\Users\hokky\Documents\マクロ\テスト.xlsx
End Sub
Python
以下のようにドキュメント>MyPython>excel操作のフォルダ内に
「テスト.xlsx」というエクセルファイルがある場合です。

import xlwings as xw
wb = xw.Book("テスト.xlsx")
full_name = wb.fullname
print(full_name)
#>>>C:\Users\hokky\Documents\MyPython\excel操作\テスト.xlsx
シートを取得 wb.sheets

上記のように一つのブック内にあるシートを全て取得する方法です。
「Sheet1」「Sheet2」「Sheet3」の三つのシートが存在しています。
VBA
Sub BookSheets()
Dim wb As Workbook
Dim filePath As String
filePath = "C:\Users\hokky\Documents\マクロ\テスト.xlsx"
Set wb = Workbooks.Open(filePath)
Dim Sheet As Worksheet
'シートを取得し、名前を表示
For Each Sheet In wb.Worksheets
Debug.Print Sheet.Name
'>>>Sheet1
'>>>Sheet2
'>>>Sheet3
Next
End Sub
Python
import xlwings as xw
wb = xw.Book("テスト.xlsx")
# ブック内のシートを取得(Sheet1,Sheet2,Sheet3がある)
sheets = wb.sheets
for sheet in sheets:
print(sheet.name) #シート名を表示
# Sheet1
# Sheet2
# Sheet3
複数のブックを扱う xw.books
ブックが複数開いている場合、全てのブックを取得する方法です。
以下のように
「テスト.xlsx」
「テスト2.xlsx」
「テスト3.xlsx」
という三つのブックが開いている状態です。

VBA
Sub BookCollection()
Dim wb As Workbook
'Workbooksで現在開いているブックを取得できる
For Each wb In Workbooks
Debug.Print wb.Name
'テスト.xlsx
'テスト2.xlsx
'テスト3.xlsx
'forXlwings.xlsm ←VBAコードを書いているブック
Next
End Sub
Python
import xlwings as xw
# 現在開いているブックを全取得
books = xw.books
# ブック名を一つ一つ取得
for book in books:
print(book.name)
# テスト.xlsx
# テスト2.xlsx
# テスト3.xlsx
単独のブックを取得することもできます。
books[ファイル名]
import xlwings as xw
books = xw.books
# 特定のブックを選択
test_book_1 = books["テスト.xlsx"]
# 後は同様にブックを操作できる
print(test_book_1.name)