OpenPyXLを使って、セルの結合/結合解除を行います。
import openpyxl
# ワークブック新規作成
wb = openpyxl.Workbook()
# アクティブシートの取得
sh = wb.active
# セルを結合 - 2行2列目から、3行3列目を結合
sh.merge_cells(start_row=2, start_column=2,end_row=3, end_column=3)
# セルの結合 判定
#結合していない箇所
checkCell0 = isinstance(sh.cell(row = 1, column = 1), openpyxl.cell.cell.MergedCell)
#結合している箇所
checkCell1 = isinstance(sh.cell(row = 2, column = 2), openpyxl.cell.cell.MergedCell)
checkCell2 = isinstance(sh.cell(row = 2, column = 3), openpyxl.cell.cell.MergedCell)
checkCell3 = isinstance(sh.cell(row = 3, column = 2), openpyxl.cell.cell.MergedCell)
checkCell4 = isinstance(sh.cell(row = 3, column = 3), openpyxl.cell.cell.MergedCell)
print(checkCell0) # False
print(checkCell1,checkCell2,checkCell3,checkCell4) # False True True True True
# ワークブック保存
wb.save('file.xlsx')
# ワークブックを閉じる
wb.close()

プログラムのコードを最初から見ていきます。
import openpyxl
openpyxlをインポートします。これをしないとopenpyxlのモジュールが使えません
# ワークブック新規作成
wb = openpyxl.Workbook()
openpyxlモジュールの、Workbook()関数を使い、新規のエクセルファイルを作成します。
新規のエクセルファイル作成と同時にシート名が”Sheet”が自動で作成されます。
# アクティブシートを取得
sh = wb.active
アクティブのシートを取得します。このエクセルファイルには”Sheet”のみしか入っていないため、このシートのオブジェクトが入ります。
# セルを結合 - 2行2列目から、3行3列目を結合
sh.merge_cells(start_row=2, start_column=2,end_row=3, end_column=3)
sh.merge_cells( )でセルを結合します。start_row=, start_column=,end_row=, end_column=で、結合するセルを指定します。必ず、start_rowとstart_columは左上のセル、end_rowとend_coloumは右下のセルとして、左上のセルから右下のセルの順番で指定しないとエラーとなります。
# セルの結合 判定
#結合していない箇所
checkCell0 = isinstance(sh.cell(row = 1, column = 1), openpyxl.cell.cell.MergedCell)
#結合している箇所
checkCell1 = isinstance(sh.cell(row = 2, column = 2), openpyxl.cell.cell.MergedCell)
checkCell2 = isinstance(sh.cell(row = 2, column = 3), openpyxl.cell.cell.MergedCell)
checkCell3 = isinstance(sh.cell(row = 3, column = 2), openpyxl.cell.cell.MergedCell)
checkCell4 = isinstance(sh.cell(row = 3, column = 3), openpyxl.cell.cell.MergedCell)
print(checkCell0) # False
print(checkCell1,checkCell2,checkCell3,checkCell4) # False True True True True
セルの結合判定しているかを確認する場合は、
isinstance(sh.cell(row = 行, column = 列), openpyxl.cell.cell.MergedCell)を使います。
isinstanceはopenpyxlの関数ではなく、pythonに備わっている関数です。
isinstance 関数は 1 番目の引数に指定したオブジェクト、 2 番目の引数に指定したデータ型を指定し、そのデータ型と等しい場合はTrue、等しくない場合はFalseを返します。記述方法は下記の通りです。
isinstance(オブジェクト, データ型)
今回は、isinstance(sh.cell(row = 1, column = 1), openpyxl.cell.cell.MergedCell) で、1行1列のセルが、openpyxl.cell.cell.MergedCellの型であるかを判別しています。
#結合している箇所
checkCell1 = isinstance(sh.cell(row = 2, column = 2), openpyxl.cell.cell.MergedCell)
checkCell2 = isinstance(sh.cell(row = 2, column = 3), openpyxl.cell.cell.MergedCell)
checkCell3 = isinstance(sh.cell(row = 3, column = 2), openpyxl.cell.cell.MergedCell)
checkCell4 = isinstance(sh.cell(row = 3, column = 3), openpyxl.cell.cell.MergedCell)
print(checkCell0) # False
print(checkCell1,checkCell2,checkCell3,checkCell4) # False True True True True
の結果を出力して頂けると分かりますが、結合しているセルの左上のセルは結合判定がFalseで返ってきます。上記コードのcheckCell1の箇所です。結合セルの左上は結合されていないと見なされるようです。
セルの結合を解除する場合は、下記の通り記述します。
sh.unmerge_cells(‘B2:C3’) #( )の中で、B列2行目~C列3行目として結合解除を指定
注意が必要なのは、結合されているセルをしっかり指定しないと、エラーとなります。つまり、結合されていないセルを指定して結合解除すると、エラーとなります。
以上となります。
OpenPyXLの他の関数の使い方について知りたい場合は下記記事が非常に参考になります。