送られてきたエクセルファイルなんだけど、
毎回同じセルが結合されてる…。
集計の邪魔になるから結合を解除したい。
openpyxlでセルの結合を解除する方法は無いの?
あります!
簡単にできる方法を紹介いたします。
また、「セルを結合する方法」と、「結合を解除する際の注意点」
も併せて紹介いたします!
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
openpyxlでセルの結合・解除をするには
「merge_cells()」「unmerge_cells()」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
ws.merge_cells('A1:C1')
ws.unmerge_cells('A3:C3')
wb.save('input.xlsx')
ws.merge_cells('A1:C1')
ws.unmerge_cells('A3:C3')
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
セルの結合
ws.merge_cells('A1:C1')
上記一文を記述することで、セルを結合することができます。
()内に結合させたいセルの範囲を指定してください。
【 ワークシート変数.merge_cells(‘結合させたいセルの範囲‘) 】
セルの結合を解除
ws.unmerge_cells('A3:C3')
上記一文は、セルの結合を解除する記述です。
()内に結合を解除したいセルの範囲を指定してください。
【 ワークシート変数.unmerge_cells(‘結合を解除したいセルの範囲‘) 】
セルの結合・解除する際の注意点
中央揃えについて
手動でセルを結合する場合、エクセル「ホーム」メニューの「セルを結合して中央揃え」
を選択する場合が多いかと思います。
しかしながら今回の内容だけでは、中央揃えについては設定・解除できません。
「セルを結合して中央揃え」をしたい場合は、「merge_cells」に加えて「中央揃え」にする必要があります。
また、「unmerge_cells」で結合を解除した場合でも、
そのセルが「セルを結合して中央揃え」で結合されていた場合、
「中央揃え」が残りますので、「左揃え」などにする必要があります。
「中央揃え」や「左揃え」にする方法は、下記記事で解説しておりますので、必要に応じて追加で記述してください。
結合を解除する際の指定について
セルの結合を解除する場合は、適格な範囲を指定する必要があります。
例えば見本のように「A3~C3」のセルが結合されており、結合を解除させたかったとします。
その場合、「ws.unmerge_cells(‘A3:C3’)」と結合されている「A3~C3」のみを指定する必要があります。
広範囲の「A1~E5」のように指定するとエラーが出ます。
1つズレて「B3~D3」や「A3~B3」のような指定でもエラーが出ます。
「毎回同じセルが結合されている」というように、
どのセルが結合されているのかがわかる状況なら便利なのですが、
それ以外の場合は役目を果たさず、使用用途が限られるため注意が必要です。
値や書式について
結合前のセル全てに値や書式が設定されていたら、結合後どうなるのでしょうか?
下図を見てください。
B2~C3にそれぞれ値が入っており、別々の書式が設定されています。
この状態でB2~C3を結合してみます。
値や塗りつぶし・文字色はB2セルのものが残っています。
C3に引かれていた罫線も一部残っていますね。
今度は結合を解除してみましょう。
B2のみに値や書式が残りました。
このようにセルを結合した場合は、基本的に「左上」にあったセルの値や書式が残ります。
結合を解除した場合も、「左上」に値や書式が最終的に残ります。
罫線は引かれた位置によって、残ったり消えたりする場合がありますのでご注意ください。
不安な場合は再設定することをおすすめします。
うまく動作しない時
エラーが出る
Cell range xx:xx is not merged
「ValueError: Cell range xx:xx is not merged」は結合の解除をしようとした時に出るエラーです。
例:ValueError: Cell range B2:E2 is not merged
「セルB2~E2は結合されたセルではないため、解除できません」というエラーです。
結合されてないセルを解除しようとしているか、結合されているセルがズレている場合に起こりますので、
実際のセルと指定のセル名とを見比べてみてください。
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでセルの結合・解除をする方法を解説いたしました。
セルの結合を解除しておけば、手動で編集する際や、openpyxlで編集する場合も便利です。
ぜひご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!