OpenPyXLの使い方~切り取り&貼り付け~

はじめに

こんにちは。風助です。
今回はセルをまとめて選択し、切り取り&貼り付けする方法について書きます。

分かりやすくするために今回もセルにその座標を書き込んでおきます。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

for rows in range(1, 20):
    for cols in range(1, 20):
        cell = ws.cell(row=rows, column=cols)
        values = cell.coordinate
        cell.value = values

wb.save('test.xlsx')

移動方法

今回は.move_range()というメソッドを使います。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

for rows in range(1, 20):
    for cols in range(1, 20):
        cell = ws.cell(row=rows, column=cols)
        values = cell.coordinate
        cell.value = values

ws.move_range("B3:D8", rows=3, cols=2)

wb.save('test.xlsx')

コードはこうなります。
移動させたいセルの範囲を指定し、何マス移動させるかを指定します。
rowsが縦に、colsが横に何マス移動させるかです。
実行するとこうなります。

B2からD8のセルが下に3マス、右に2マス移動しました。

この時、マイナスの値を入れると上(又は左)に移動します。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

for rows in range(1, 20):
    for cols in range(1, 20):
        cell = ws.cell(row=rows, column=cols)
        values = cell.coordinate
        cell.value = values

ws.move_range("B3:D8", rows=-1, cols=-1)

wb.save('test.xlsx')

こんな感じになります。
B3~D8のセルが一つ上、一つ左に移動しましたね。

選択範囲に関数があったら?

試してみましょう。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

# 範囲内に式、対象セル
ws['B3'] = 10
ws['C3'] = '=B3'
# 範囲内に式、範囲外に対象セル
ws['A4'] = 11
ws['C4'] = '=A4'
# 範囲内に対象セル、範囲外に式
ws['B5'] = 12
ws['A5'] = '=B5'
# 範囲外に式、対象セル
ws['A6'] = 13
ws['A7'] = '=A6'


wb.save('test.xlsx')

これをベースにいじっていきます。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

# 範囲内に式、対象セル
ws['B3'] = 10
ws['C3'] = '=B3'
# 範囲内に式、範囲外に対象セル
ws['A4'] = 11
ws['C4'] = '=A4'
# 範囲内に対象セル、範囲外に式
ws['B5'] = 12
ws['A5'] = '=B5'
# 範囲外に式、対象セル(変化なし)
ws['A6'] = 13
ws['A7'] = '=A6'

ws.move_range("B3:C8", rows=2, cols=1)

wb.save('test.xlsx')

コードはこんな。実行するとこうなります。

D5(元々C3)はゼロになりました。C5(元々B3)のコピーが欲しいときは困りますね。
もし関数の入っているセルが関数の指定先のセルにかぶってしまうと大変です。(例:E3に=E3の関数が入る)

ですがこんな時に役立つ引数があります。

import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

# 範囲内に式、対象セル
ws['B3'] = 10
ws['C3'] = '=B3'
# 範囲内に式、範囲外に対象セル
ws['A4'] = 11
ws['C4'] = '=A4'
# 範囲内に対象セル、範囲外に式
ws['B5'] = 12
ws['A5'] = '=B5'
# 範囲外に式、対象セル(変化なし)
ws['A6'] = 13
ws['A7'] = '=A6'

ws.move_range("B3:C8", rows=2, cols=1, translate=True)

wb.save('test.xlsx')

このtranslateってとこです。 デフォルトでは無効になってます。
これにTrueを与えると関数に含まれるセルがその分ズレます。
言葉で説明するのは大変ですね。実際に見ていきましょう。

D5にきちんと数値が入りました。
今度はD6(元々C4)がゼロになってしまいました。もともとA4を指定していたのがB6を指定するようになったからです。

画像が分かりづらくてすみません…。

必要に応じて使い分けるしかないみたいですね。

おわりに

今回はセルを選択し、切り取り&貼り付けをする方法について書きました。

参考になると嬉しいです。

次回までさようなら。

コメント

  1. Good day! This is my first comment here so I just wanted to give a quick shout out and say I genuinely enjoy reading your posts. Can you recommend any other blogs/websites/forums that go over the same topics? Appreciate it!

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