Pythonを使ってエクセルの不要シートを削除する方法を紹介します。
このプログラムは単発で使うというよりは、むしろ他と組み合わせて使うと威力を発揮します。
・必要なシートは削除しない
・プログラム解説
それでは以下で詳しく紹介していきます。
目次
- 1 ExcelデータをPythonで処理するプログラムの概要
- 2 Pythonプログラムを実行するための準備
- 3 Pythonプログラム解説
- 3.1 #プログラム1|ライブラリの設定
- 3.2 プログラム2|Pythonファイルと同じフォルダの「sample.xlsx」を指定して読み込む
- 3.3 プログラム3|指定したエクセルファイルの全シートを取得
- 3.4 プログラム4|削除したくないシート名をリストで入力
- 3.5 プログラム5|シートを一つずつ検証
- 3.6 プログラム6|削除フラグをFalse設定
- 3.7 プログラム7|プログラム4の削除したくないシートを一つずつ検証
- 3.8 プログラム8|削除したくないシートであれば、削除フラグをFalseにして繰り返しから抜ける
- 3.9 プログラム9|削除していいシートであれば、削除フラグをTrueにする
- 3.10 プログラム10|削除フラグがTrueであれば(Falseの場合はスキップ)
- 3.11 プログラム11|現在のシート数を調べる
- 3.12 プログラム12|現在のシート数が2以上ならば、シートを削除
- 3.13 プログラム13|エクセルファイルの保存
- 4 Pythonについて詳しく理解したいなら
ExcelデータをPythonで処理するプログラムの概要
今回は、Pythonを使って不要なエクセルシートを削除していきます。
以下では、[Sheet1, Sheet2, Sheet3, Sheet4, Sheet5]の5つのシートがあります。
そのなかで[Sheet1, Sheet2]だけを残して、他のシートを削除していきます。
この作業をPythonでやっていきます。
Pythonプログラムを実行するための準備
openpyxlを使うためには、事前準備としてモジュールをインストールする必要があります。
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install openpyxl」と入力して[Enter]
4. インストール完了
これでインストールが完了し、openpyxlを使えるようになります。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
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 |
#プログラム1|ライブラリの設定 from openpyxl import load_workbook #プログラム2|Pythonファイルと同じフォルダの「sample.xlsx」を指定して読み込む filepath = 'sample1.xlsx' wb = load_workbook(filename=filepath) print('\n\n') #プログラム3|指定したエクセルファイルの全シートを取得 worksheets = wb.sheetnames print(worksheets) #プログラム4|削除したくないシート名をリストで入力 nodelsheets = ['Sheet1','Sheet2'] #プログラム5|シートを一つずつ検証 for worksheet in worksheets: # プログラム6|削除フラグをFalse設定 flag = False # プログラム7|プログラム4の削除したくないシートを一つずつ検証 for nodelsheet in nodelsheets: # プログラム8|削除したくないシートであれば、削除フラグをFalseにして繰り返しから抜ける if worksheet == nodelsheet: flag = False break # プログラム9|削除していいシートであれば、削除フラグをTrueにする else: flag = True # プログラム10|削除フラグがTrueであれば(Falseの場合はスキップ) if flag == True: # プログラム11|現在のシート数を調べる sheetscount = len(wb.sheetnames) # プログラム12|現在のシート数が2以上ならば、シートを削除 if sheetscount >= 2: del wb[worksheet] # プログラム13|エクセルファイルの保存 wb.save(filepath) |
以下で詳細の解説をしていきます。
#プログラム1|ライブラリの設定
1 |
from openpyxl import load_workbook |
ライブラリの設定です。
エクセルを操作するためのライブラリ
openpyxl以外にもエクセルを操作するためのライブラリはありますが、openpyxlを使うことをオススメします。
理由はウェブで紹介されている情報が多く、アレンジをしやすいからです。
プログラム2|Pythonファイルと同じフォルダの「sample.xlsx」を指定して読み込む
1 2 |
filepath = 'sample1.xlsx' wb = load_workbook(filename=filepath) |
filepath = ‘sample1.xlsx’
変数filepathに「’sample1.xlsx’」を設定
今回使うエクセルファイルは、pythonプログラムと同じフォルダに保存しておきます。(画像はDropboxのもの)
もし違うフォルダで保存したい場合は、「D:\Website_パソコンスキルの教科書\201_Pythonでエクセルシートへ転記\sample1.xlsx」のようなフルパスを設定する方法があります。
wb = load_workbook(filename=filepath)
エクセルファイルを読み込んで、変数wbとして設定
プログラム3|指定したエクセルファイルの全シートを取得
1 |
worksheets = wb.sheetnames |
指定したエクセルファイルの全シート名を取得
print(worksheets)でチェックしてみると、以下のようにシート名をリストで取得します。
プログラム4|削除したくないシート名をリストで入力
1 |
nodelsheets = ['Sheet1','Sheet2'] |
変数nodelsheetsに削除したくないシート名をリスト型で設定
ここでは、「Sheet1」と「Sheet2」を削除しないように設定しています。
必要に応じて、この部分のシート名を変更してご活用ください。
プログラム5|シートを一つずつ検証
1 |
for worksheet in worksheets: |
プログラム3で取得したエクセルのシート名を一つずつ検証する
この事例では[Sheet1, Sheet2, Sheet3, Sheet4, Sheet5]となっているため、これらの5つのシートを一つずつ処理していきます。
プログラム6|削除フラグをFalse設定
1 |
flag = False |
変数flagにFalseを設定(初期化)
変数worksheetの繰り返し処理の始まりで、「flag=False」に初期化します。
以降のプログラムで「flag=Trueであれば、シート削除」して「flag=Falseであれば、シートを残す」ようにプログラムを書いていきます。
プログラム7|プログラム4の削除したくないシートを一つずつ検証
1 |
for nodelsheet in nodelsheets: |
プログラム4で設定した「削除したくないシート」を一つずつ検証する
この事例では[Sheet1, Sheet2]となっているため、この2つのシートを1つずつ処理していきます。
プログラム8|削除したくないシートであれば、削除フラグをFalseにして繰り返しから抜ける
1 2 3 |
if worksheet == nodelsheet: flag = False break |
if worksheet == nodelsheet:
もしエクセルのシートが、削除したくないシートと一致していれば
今回の事例の場合、worksheet = {Sheet1, Sheet2, Sheet3, Sheet4, Sheet5}で、nodelsheet = {Sheet1,Sheet2}と総当たりでマッチングしていきます。
worksheetとnodelsheetが一致する、つまり「Sheet1」「Sheet2」であれば、プログラム6で戻ります。
worksheetとnodelsheetがしない、つまり「Sheet3」「Sheet4」「Sheet5」であれば、プログラム9が実行されます。
flag = False
flagをFalseに設定
削除フラグ「flag」をFalseにする(削除しない設定)
break
プログラム7のfor文を終了して、プログラム6の次のシートへ
worksheetとnodelsheetが一致した状態なので、breakでプログラム6で戻ります。
プログラム9|削除していいシートであれば、削除フラグをTrueにする
1 2 |
else: flag = True |
else:
プログラム8のif文がTrueではない場合に実行
ここのelseは、worksheetとnodelsheetがしない、つまりworksheet=「Sheet3」「Sheet4」「Sheet5」の場合です。
flag = True
flagをTrueに設定
削除フラグ「flag」をTrueにする(削除する設定)
プログラム10|削除フラグがTrueであれば(Falseの場合はスキップ)
1 |
if flag == True: |
削除フラグがTrueであれば、プログラム11とプログラム12を実行(Falseの場合はスキップ)
削除フラグがTrueになっているかどうかif文で検証する。
プログラム11|現在のシート数を調べる
1 |
sheetscount = len(wb.sheetnames) |
現在のシート数を調べる
プログラム12でシート削除するのですが、エクセル内のシートを全て削除するとエクセルがエラーで開けません。
そこでシート削除する前に、シートがいくつ残っているかを調べます。
プログラム12|現在のシート数が2以上ならば、シートを削除
1 2 |
if sheetscount >= 2: del wb[worksheet] |
if sheetscount >= 2:
シート数が2以上であれば、
シート数が2以上であれば、次のプログラム「シート削除」を実行する。
シート数が1であれば、そのシートを削除してシート数が0になってしまい、エラーの原因となる。
したがって、シートを削除を回避するようにしている。
del wb[worksheet]
worksheetで設定したシートを削除
このプログラムでシートを削除する。
この事例では、シート名が「Sheet3」「Sheet4」「Sheet5」のとき、シートを削除する。
プログラム13|エクセルファイルの保存
1 |
wb.save(filepath) |
変数filepath(プログラム2)の名前でエクセルファイルを保存(ここでは上書き保存)
開いているエクセルファイルと同じファイル名で保存することで、上書き保存をすることが可能。
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。