【openpyxl】シートをコピーする方法【わかりやすく解説】

スポンサードリンク
Python
過去の自分
過去の自分

エクセルに今月のデータをまとめるんだけど、書式設定がめんどう…。
先月のシートをコピーして文字だけ変えたいんだけど、openpyxlでそんなことできる?

今の自分
今の自分

なるほど…。
では今回は、「openpyxlでシートをコピーする方法」
できるだけわかりやすく解説いたします。
また、シートをコピーした後に行いそうな処理もサポート
いたしますので、ぜひ最後まで読んでいってください。

著者情報
スポンサードリンク

openpyxlでシートをコピーするには

「copy_worksheet()」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。

全コード

import openpyxl

wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']

new_sheet = wb.copy_worksheet(ws)

wb.save('C://Utatane/output.xlsx')
new_sheet = wb.copy_worksheet(ws)

実行結果

実行結果1

事前準備

  • openpyxlのインストール

既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。

openpyxlのインストール方法

openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install openpyxl

※openpyxlを使用したことがある場合は、このインストール作業は不要です。

インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

new_sheet = wb.copy_worksheet(ws)

上記コードにて、エクセルのシートをコピーすることができます。

まず新しい名前の変数を書いたら、「=(イコール)」を書きます。
この変数にコピーされたシートが入ります。

今回はわかりやすく「new_sheet」という名前にしていますが、何でも構いません。
しかしながら、つけられない名前があったり、注意点があったりしますので、下記記事をご参考ください。

イコールの後に「ブックが入った変数」を書いたら、続けて「.copy_worksheet()」を書きます。
()内に「コピー元のシートが入った変数」を書いたら完了です。

<シートコピーテンプレ>
【 新しい変数 = ブック変数.copy_worksheet(コピー元のシート変数) 】

実行してみましょう。

実行結果1

「Sheet1 Copy」というシートができています。
書式や値が「Sheet1」とまったく同じなので、「Sheet1」がコピーされたものだとわかります。

しかしながら、コピーしたシートの名前や位置を変えたいと思うかもしれません。
それらも比較的簡単にできますので、次項で解説いたします。

スポンサードリンク

コピーしたシートの各種設定・編集

前項でエクセルのシートをコピーする方法を解説いたしました。
シートをコピーした後に行いそうな処理を3つ紹介いたします。

  • シート名を変更
  • シートの位置を変更
  • シート内の値を削除

シート名を変更

コピーしたシートの名前が「Sheet1 Copy」のままでは、わかりにくいですよね。
わかりやすく「202409」に変更してみましょう。

import openpyxl

wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']

new_sheet = wb.copy_worksheet(ws)

new_sheet.title = '202409'

wb.save('C://Utatane/output.xlsx')

上記コードにて、コピーしたシートの名前も変更することができます。
8行目に注目してください。それ以外は前項と同じです。

new_sheet.title = '202409'

上記一文にて、シート名を変更することができます。

シート名を変更した画像

コードの解説は下記記事をご参考ください。

次は、コピーしたシートの位置を変更してみましょう。

シートの位置を変更

最新データのシートは一番左(先頭)にあったほうがわかりやすい場合が多いです。
そこで、コピーしたシートが先頭になるよう位置を変更してみましょう。

import openpyxl

wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']

new_sheet = wb.copy_worksheet(ws)

new_sheet.title = '202409'

wb.move_sheet('202409', offset=-1)
ws.sheet_view.tabSelected = False

wb.save('C://Utatane/output.xlsx')

上記コードにて、コピーしたシートが先頭になるようにしています。
10行目に注目してください。

wb.move_sheet('202409', offset=-1)
ws.sheet_view.tabSelected = False

コードの10行目で、シートの位置を変更しています。

まずブックが入った変数に続けて、「.move_sheet()」を書きます。
()内には、「位置を変更したいシートの名前」「移動させる数」を指定します。

「移動させる数」ですが、「1」なら「右へ1つ」「-1」なら「左へ1つ」移動します。
先頭に置きたい場合、「-9999」とするのが手っ取り早いです。エラーは特に出ません。

<シートの位置変更テンプレ>
【 ブック変数.move_sheet(‘シート名‘, offset=移動させる数) 】

コードの10行目だけでは、下図のようにシートがグループ化された状態になる場合があります。

シートの位置を先頭に変更したがグループ化されてしまった画像

そこでコードの11行目を記述して、「コピー元のシート」の選択を解除しています。
これでグループ化を解除することができます。

グループ化を解除した画像

次は、コピーしたシートの値を削除する方法を見ていきましょう。

シート内の値を削除

コピーしたシートに新しく値を書き込むことが多いですが、
古い値が残っていると問題になる場合があります。

そこでシートの値を一旦すべて削除する方法を紹介いたします。

import openpyxl

wb = openpyxl.load_workbook('C://Utatane/input.xlsx')
ws = wb['Sheet1']

new_sheet = wb.copy_worksheet(ws)

new_sheet.title = '202409'

wb.move_sheet('202409', offset=-1)
ws.sheet_view.tabSelected = False

for row in new_sheet.iter_rows():
    for cell in row:
        cell.value = None

wb.save('C://Utatane/output.xlsx')

上記コードにて、コピーしたシートの値をすべて削除できます。
コードの13行目に注目してください。

for row in new_sheet.iter_rows():
    for cell in row:
        cell.value = None

for文とiter_rowsを使って、シート内の値を全て削除しています。
for文やiter_rowsの詳細は下記記事をご参考ください。

実行してみましょう。

値が削除された画像

値が全て削除されました。

このシートに値を書き込む方法は、下記記事をご参考ください。

スポンサードリンク

うまく動作しない場合の対処法

エラーが出る

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

Permission denied: ○○

操作しようとしているファイルにアクセスできないというエラーです。
ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。

詳しい解説は、下記記事をご参考ください。

Worksheet ○○ does not exist

「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

最後に

openpyxlでシートをコピーする方法を解説いたしました。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

挫折せずにPythonを独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

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