openpyxl で表(セル範囲)を別の位置へ移動する方法

Excel シートを編集していると、「既存の表を数行下へずらしたい」「列を 1 列右へまとめて移動したい」といった場面がしばしば発生いたします。openpyxl にはセル範囲を丸ごと移動できる move_range() メソッドが用意されています。本記事では、サンプルワークブックの表を 2 行下・1 列右 へ移動する具体例を示し、引数の意味や注意点を丁寧に解説いたします。


目次

動作環境

項目内容
Python3.10 以上
主要ライブラリopenpyxl(pip install openpyxl
入力ファイル例schema_definition.xlsx
出力ファイル例schema_definition_moved.xlsx

サンプルコード

from openpyxl import load_workbook

# 1. ワークブックとアクティブシートを読み込み
wb_path = 'schema_definition.xlsx'
wb_schema = load_workbook(wb_path)
ws_schema = wb_schema.active

# 2. 移動対象のセル範囲を指定(D4~I8 の 5×6 の表)
source_range = 'D4:I8'

# 3. rows=2, cols=1 を指定して 2 行下・1 列右へ移動
ws_schema.move_range(
    source_range,
    rows=2,    # 正の値で下方向、負の値で上方向へ移動
    cols=1     # 正の値で右方向、負の値で左方向へ移動
)

# 4. 保存(上書きを避けるため別名で保存)
wb_schema.save('schema_definition_moved.xlsx')

コードのポイント

パラメータ説明
source_range"D4:I8" のように「開始セル:終了セル」で指定します。
rows正の値で下方向、負の値で上方向へセル範囲をシフトします。
cols正の値で右方向、負の値で左方向へセル範囲をシフトします。
既存データの上書き移動先に別のデータがある場合は上書きされます。必要なら事前にコピーを保存してください。

注意点とベストプラクティス

  1. 数式と参照セルの更新
    move_range() では、セル内の数値・文字列・書式は移動しますが、
    数式のセル参照は自動更新されません。移動後に数式が崩れる可能性がある場合は、
    Translator クラスで数式を再生成するか、openpyxl.utils.cell で参照を置換して調整してください。
  2. 結合セルが含まれている場合
    対象範囲に結合セルがあると移動後に結合が解除されることがあります。
    ws_schema.merged_cells.ranges を確認し、必要に応じて再結合を行ってください。
  3. フレームワーク化
    複数のシートや複数範囲を移動する場合は、関数化して範囲・行列オフセットをパラメータとして渡すとメンテナンスが容易です。

まとめ

  • move_range() を使うと セル内容・書式を保持したまま 表をまとめてシフトできます。
  • rowscols の正負で 上下左右への移動量 を直感的に指定できます。
  • 数式や結合セルが絡む場合は 移動後の整合性チェック を必ず行うと安全です。

大規模なレイアウト調整やテンプレート生成処理に、ぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次