【業務自動化】Chapter1-2|新規Excelファイルを作成しよう

一つ前のページでは openpyxlをインストール しました。
今回は openpyxlでExcelファイルを新規作成 してみましょう。
Chapter1:PythonによるExcel自動化の基本を身につけよう
・Chapter1-1:openpyxlとは何か|インストールと動作確認
・Chapter1-2:PythonでExcelファイルを作成しよう ◁今回はここ
・Chapter1-3:Excelシートからデータを読み込もう
・Chapter1-4:Excelシートにデータを書き込もう
・Chapter1-5:データを新規シートへ自動振り分けしよう
・Chapter1-6:簡単なExcel自動化を体験しよう
Chapter2:自動化ツールを.exe化して配布しよう
Chapter3:現場で使える便利な自動化ツールを4つ作ろう
Chapter4:Webスクレイピングでデータを自動で集めよう
Chapter5:自動化ツールを作ってお金を稼ごう
Excelファイルを自動で作成できるようになることは、業務自動化の第一歩です。
この記事では、Pythonでファイル名やセルの内容を指定し、新しいExcelファイルを作成する方法を学びます。
読み終えるころには、次のことができるようになります。
- PythonコードからExcelファイルを新規作成できる
- セルに文字を入力して保存できる

この作業だけを見れば、普段どおり「右クリック → 新規作成」でファイルを作るほうがずっと早いよね。
ただ、これからExcel業務自動化を学んでいくうえで、これは土台となる部分だから、しっかりと覚えよう!
PythonでExcelファイルを新規作成する方法
openpyxlを使って新しいExcelファイルを作成し、セルに文字を書き込み、ファイルとして保存 する方法を学びます。
まずは実際のサンプルコードを確認してみましょう。

openpyxlでExcelファイルを新規作成するサンプルコード
openpyxlでExcelファイルを新規作成し、セルに文字を書き込むシンプルなコードを紹介します。
まずはそのままコピーして実行してみてください。
import openpyxl # openpyxlをインポート
new_book = openpyxl.Workbook() # Workbookクラスのインスタンス生成
sheet = new_book.active # アクティブなシートを取得
sheet['A1'] = "Pythonで作成したExcel" # A1セルに文字列を入力
new_book.save("new_excel.xlsx") # 「new_excel.xlsx」というファイル名で保存このコードを実行すると、コードを保存したフォルダの中に「new_excel.xlsx」という新しいファイルが作成されます。
A1セルには「Pythonで作成したExcel」と入力されているはずなので、実際に開いて確認してみてください。
ただし、パソコンの設定によっては保存される場所が異なることがあります。
その場合の対処方法はあとで説明しますので、ここではまずコードの流れを押さえていきましょう。
コードの解説:PythonでExcelを作成する流れ
このコードは短いですが、Excel自動化の基本がしっかり詰まっています。
1行ずつ順番に見ていきましょう。
ライブラリの読み込み|openpyxlのインポート文
import openpyxl # openpyxlをインポート
最初に、Excelを操作するためのopenpyxlを読み込んでいます。
Excel自動化のコードを書くときは、まずこの記述から始めます。
新規ワークブックの作成|Workbook()クラスの使い方
new_book = openpyxl.Workbook() # Workbookクラスのインスタンス生成
インポートしたopenpyxlライブラリの Workbook()クラス をインスタンス生成することで新しいWorkbookオブジェクト(Excelファイル)を生成し、変数に代入しています。
この方法で作成されたWorkbookオブジェクト(Excelファイル)にはデフォルトで「Sheet」という名前のシートが1つ入っています。
ただし、この時点ではnew_bookはメモリ上に存在するだけで、まだ保存はされていません。
「クラス」や「インスタンス生成」という言葉に自信がない方は、↓↓の記事で復習しましょう。

シートの取得|activeプロパティの使い方
sheet = new_book.active # アクティブなシートを取得
Workbookオブジェクト (Excelファイル) には複数のシートを持たせることができます。

その中で「現在アクティブな(選択されている)シート」を取得するのが .activeプロパティです。
新たに開く場合は一番最初の(一番左の)シートを取得します。
先ほど新規作成したWorkbookオブジェクト(Excelファイル)に.activeプロパティをあてることで Worksheetオブジェクト を作成し、変数sheetに代入しています。
セルにデータを書き込む|[]セルオブジェクトの使い方
sheet['A1'] = "Pythonで作成したExcel" # A1セルに文字列を入
Worksheetオブジェクトに[]を付けることで セルオブジェクト となり、データの読み書きができます。
ここではA1セルに「Pythonで作成したExcel」という文字列を入力しています。
ファイルの保存|saveメソッドの使い方
new_book.save("new_excel.xlsx") # 「new_excel.xlsx」というファイル名で保存Workbookオブジェクトの save()メソッド を使うことで、Excelファイルを保存できます。
ここでは「new_excel.xlsx」という名前で保存しています。
保存先はスクリプトを実行したフォルダ(カレントディレクトリ)です。

pathlibライブラリでExcel保存先を指定しよう
先ほどのコードでは、Excelファイルは スクリプトを実行したフォルダ に保存されました。
しかし、お使いのパソコンの設定によっては作成される場所が異なる場合があります。
また、業務で使う場合は「レポート用フォルダ」や「バックアップ用フォルダ」など、決まったディレクトリに保存したいことも多いでしょう。
ここで便利なのが pathlibライブラリ です。
pathlibを使えば、ファイルやフォルダのパスを簡単かつ安全に扱うことができ、OSに依存しないコードが書けます。
ここからpathlibライブラリの使い方のみを説明していきます。より詳しい内容を知りたい場合は↓↓の記事を参考にしてください。

pathlibライブラリの基本と使い方
Pythonの標準ライブラリである pathlib は、ファイルやフォルダの「パス(保存場所)」を扱うための便利なツールです。
従来は os.path を使うことが多かったのですが、pathlibを使うと直感的にパスを操作できるため、この近年ではこちらが推奨されています。
たとえば、「業務自動化学習」というフォルダを作り、その中に勉強用のPythonファイル「Sample.py」と、Excelファイルを保存する「workbooks」というフォルダを保存するとします。
業務自動化学習/ # 全体の保存フォルダ ├── Sample.py # Pythonファイル └── workbooks/ # Excelファイルの保存フォルダ └── Sample.xlsx # Excelファイル
作成したExcelファイル(Sample.xlsx)を保存するためには、保存場所のworkbooksフォルダを指定する必要があります。
Pythonコード内で指定するには、以下のように書きましょう。
import pathlib # pathlibのインポート file_path = pathlib.Path(__file__).parent / "workbooks" # エクセルファイルの保存フォルダの相対パスを作成
2行目を詳細に解説します。
pathlib.Path(__file__)|実行中のスクリプトのファイルパス取得
pathlib.Path(__file__) # pathlibライブラリのPathクラスをインスタンス生成
__file__ は「実行中のスクリプトのファイルパス」を表す特別な変数です。
pathlib.Path(__file__) とすることで、スクリプトファイルのパス(そのPythonファイルがある場所)を Pathオブジェクト に変換できます。
例えば、業務自動化学習フォルダの中にSample.pyというファイルがある場合、pathlib.Path(__file__) は以下の意味となります。
C:\業務自動化学習\Sample.py
.parentプロパティ|親フォルダの取得
pathlib.Path(__file__).parent # Pathオブジェクトの親フォルダ
Pathオブジェクトの .parentプロパティを使うと、そのファイルがある 親フォルダ を取得できます。
業務自動化学習フォルダの中にSample.pyがある場合、.parentを付けることで以下の意味となります。
C:\業務自動化学習
/ 演算子によるパス結合
pathlibの特徴的な書き方として、パスの結合に / 演算子 が使えます。
文字列を単純に結合するのではなく、OSに応じて正しい区切り文字(\ や /)を自動で選んでくれる のがポイントです。
これを使用することで、Pythonファイルを保存したフォルダの中の「workbooks」というフォルダを指定することができます。
import pathlib # pathlibのインポート file_path = pathlib.Path(__file__).parent / "workbooks" # エクセルファイルの保存フォルダの相対パスを作成
このコードの変数file_pathには以下の文字列が格納されます(Windowsの場合)。
C:\業務自動化学習\workbooks
このサイトにおけるファイルの保存場所のルール
このサイトで学習を進めていくにあたり、作成するPythonファイルやExcelファイルは以下のような階層で保存することを推奨します。
チャプター毎にフォルダを分け、Pythonファイルはそのフォルダ直下に保存。Excelファイルはworkbooksというフォルダを作ってその中に保存しましょう。
業務自動化学習/ # 学習フォルダ ├── Chap1/ # チャプター1の保存フォルダ │ ├── Chap1-1/ # チャプター1-1の保存フォルダ │ │ ├── Chapter1-1.py │ │ └── workbooks/ # チャプター1-1のエクセルファイルの保存フォルダ │ │ └── sample1-1.xlsx │ ├── Chap1-2/ # チャプター1-2の保存フォルダ │ │ ├── Chapter1-2.py │ │ └── workbooks/ │ │ └── sample1-2.xlsx │ ├── Chap1-3/ # チャプター1-3の保存フォルダ │ ├── Chap1-4/ # チャプター1-4の保存フォルダ │ ├── Chap1-5/ # チャプター1-5の保存フォルダ │ └── Chap1-6/ # チャプター1-6の保存フォルダ │ ├── Chap2/ # チャプター2の保存フォルダ ├── Chap3/ # チャプター3の保存フォルダ ├── Chap4/ # チャプター4の保存フォルダ └── Chap5/ # チャプター5の保存フォルダ
今後紹介するコードは全て、この階層で保存されていることを前提としています。
ぜひ、このように保存して下さい。
保存先フォルダを指定しよう|サンプルコードの紹介
先ほどの新規Excelファイルを作成するコードを、pathlibライブラリを使って保存場所を指定するように変更しましょう。
import openpyxl, pathlib # openpyxlとpathlibのインポート file_path = pathlib.Path(__file__).parent / "workbooks" # エクセルファイルの保存フォルダの相対パスを作成 new_book = openpyxl.Workbook() # Workbookクラスのインスタンス生成 sheet = new_book.active # アクティブなシートを取得 sheet['A1'] = "Pythonで作成したExcel" # A1セルに文字列を入力 new_book.save(file_path / "new_excel.xlsx") # 「new_excel.xlsx」というファイル名で保存
7行目で、ファイル名に保存先のフォルダパスを結合して渡しています。
これにより、workbooks フォルダの中に new_excel.xlsx が保存されます。
7行目は以下のように書くこともできます。同じ意味になることを確認しましょう。
new_book.save(pathlib.Path(__file__).parent / "workbooks" / "new_excel.xlsx")
まとめ|Excel新規作成と保存先指定の基本
この記事では、PythonでExcelファイルを新規作成する方法 を学びました。
Workbook()クラス:新しいExcelブックを作成- activeプロパティ:アクティブなシートを取得
- セルオブジェクト[]:セルにデータを読み書き
save()メソッド:Excelファイルとして保存pathlibライブラリ:スクリプトの場所を基準に保存先を指定
これにより、Excelファイルを 任意の場所に自動生成して保存する仕組み を作れるようになりました。
次回は、この基礎を応用して Excelからデータを読み込む方法 に進んでいきます。
よくある質問(FAQ)|Excelファイルの新規作成と保存
Q1. openpyxlでExcelファイルが「作成できない/保存できない」(PermissionError・FileNotFoundErrorなど)と出ます。原因と対処法は?
代表的な原因は次のとおりです。
順に切り分けると解決しやすくなります。
- ファイルをExcelで開いたまま:同名ファイルを既に開いていると書き込みが拒否されます。該当ファイルやプレビュー(エクスプローラーのプレビュー表示)を閉じてから再実行してください。
- 保存先フォルダが存在しない:指定したフォルダが未作成だと保存できません。事前にフォルダを用意してから保存してください(学習用の固定フォルダを用意しておくと安全です)。
- 権限不足(書き込み不可):ネットワークドライブや「Program Files」直下などは権限で弾かれることがあります。ユーザープロファイル配下(ドキュメント等)のフォルダを使いましょう。
- パスのタイプミス・禁則文字:日本語・全角スペース・記号を含むパスでトラブルが起きることがあります。フォルダ名・ファイル名を確認し、必要なら半角英数字中心の名前に見直します。
- 相対パスの誤解:実行方法によって“現在の作業ディレクトリ(カレントディレクトリ)”が変わるため、相対パスが想定外の場所を指すことがあります。後述の「Q2」を参考に、実行環境に左右されにくい指定に切り替えましょう。
Q2. 保存先(パス)を“プロジェクト配下に固定”したいです。相対パスと絶対パス、カレントディレクトリの考え方は?
初学者のつまずきの多くは「相対パスは実行時の場所に依存する」点にあります。
ターミナルでの実行、エディタの実行ボタン、タスクスケジューラなど、起動手段が変わると相対パスの基準も変わるため、意図しない場所に保存されがちです。
確実にプロジェクト配下へ保存したい場合は、次の考え方を押さえましょう。
- 基準点を“スクリプト自身の位置”に置く:スクリプトファイルが置かれているフォルダを基準に、そこから目的の保存フォルダ(例:
workbooks)へパスを伸ばします。これなら起動方法が変わっても保存先は安定します。 - OS非依存のパス結合を使う:手作業で「\」や「/」を連結せず、パス専門の仕組みでフォルダとファイル名を結合すると、Windows/macOSどちらでも安全に扱えます。
- 保存フォルダの存在確認:保存先が無ければ先にフォルダを作る、という流れを習慣化しましょう。学習用プロジェクトでは、最初に「成果物置き場」を1つ決めておくと迷いません。
この設計にしておくと、後からツールを配布したり自動実行(タスクスケジューラ等)したりする際も、保存先がブレないのでトラブルが激減します。
Q3. 作成したファイルを開くと「拡張子が正しくない」「形式が違う可能性がある」と警告が出ます。xlsx/xls/xlsmの違いは?
openpyxlが標準で扱うのはOffice Open XML形式(.xlsx)です。
ここを理解しておくと警告を避けられます。
- .xlsx(推奨):openpyxlが新規作成・保存に適した形式。マクロは含めません。Excel 2007以降の互換性が高く、現在の主流です。
- .xls(旧形式):古いバイナリ形式です。拡張子だけ.xlsにしても、実体が.xlsxだとExcelが形式不一致の警告を表示します。古い.xlsを前提にする必要がない限り、.xlsxを使用してください。
- .xlsm(マクロ有効ブック):拡張子は似ていますが、マクロ(VBA)を含む形式です。openpyxlはVBAマクロの作成・編集を目的としていません。マクロが必要な場合は、Excel側でテンプレートを用意し、用途に応じて使い分ける設計が安全です。
ポイントは、ファイルの中身と拡張子を一致させること。
学習段階では迷わず「.xlsx」を使い、別形式が必要になったときだけ要件を整理してから切り替えるのがおすすめです。


