Python(openpyxl)で、Excelの行・列・別シートへデータをコピーする方法をまとめました。用途に合わせたコピー処理をコード付きでご紹介します。
ぜひ、お試しください。
列をコピーする 2選
列をコピーする(指定列)
以下のコードを実行すると、列の値を複製します。
import openpyxl
wb = openpyxl.load_workbook('C:/Users/xxx/Desktop/test/test.xlsx')
ws = wb['Sheet1']
i = 1
for row in ws.iter_rows():
for cell in row:
if cell.col_idx == 1:
ws.cell(row=i, column=4).value = cell.value
i = i + 1
#別名で保存
wb.save('C:/Users/xxx/Desktop/test/testコピー.xlsx')
A列の値を、D列にコピーします。
[if cell.col_idx == 1:] で、コピー元のA列を指定しています。

列をコピーする(複数列)
以下のコードを実行すると、複数列の値をコピーします。
import openpyxl
wb = openpyxl.load_workbook('C:/Users/xxx/Desktop/test/test.xlsx')
ws = wb['Sheet1']
#コピーしたい列番号
mylist = [2,3,6]
#貼り付け開始行
i = 1
#貼り付け開始列
j = 8
#配列ループ
for list in mylist:
#行をループ
for row in ws.iter_rows():
#セルをループ
for cell in row:
#配列の数値と同じ列番号だったら
if cell.col_idx == list:
#列をコピー
ws.cell(row=i, column=j).value = cell.value
i = i + 1
i = 1
j = j + 1
#別名で保存
wb.save('C:/Users/xxx/Desktop/test/コピー.xlsx')
B列・C列・F列の値をコピーして、H列から貼り付けます。
「mylist = [2,3,6]」 で、コピーする列番号を指定します。

行をコピーする 2選
行をコピーする(指定行)
以下のコードを実行すると、行の値を複製します。
import openpyxl
wb = openpyxl.load_workbook('C:/Users/xxx/Desktop/test/test.xlsx')
ws = wb['Sheet1']
i = 1
for row in ws.iter_rows():
for cell in row:
if cell.row == 1:
ws.cell(row=9, column=i).value = cell.value
i = i + 1
#別名で保存
wb.save('C:/Users/xxx/Desktop/test/testコピー.xlsx')
1行目の値を、9行目にコピーします。
[if cell.row == 1:] で、コピー元の1行目を指定しています。

行をコピーする(複数行)
以下のコードを実行すると、複数行の値をコピーします。
import openpyxl
wb = openpyxl.load_workbook('C:/Users/xxx/Desktop/test/test.xlsx')
ws = wb['Sheet1']
#コピーしたい行番号
mylist = [2,3,6]
#貼り付け開始行
i = 12
#貼り付け開始列
j = 1
#配列ループ
for list in mylist:
#行をループ
for row in ws.iter_rows():
#セルをループ
for cell in row:
#配列の数値と同じ行番号だったら
if cell.row == list:
#行をコピー
ws.cell(row=i, column=j).value = cell.value
j = j + 1
j = 1
i = i + 1
#別名で保存
wb.save('C:/Users/xxx/Desktop/test/コピー.xlsx')
2行目・3行目・6行目の値をコピーして、12行目から貼り付けます。
「mylist = [2,3,6]」 で、コピーする行番号を指定します。

別シートにコピー 7選
別シートにコピー(特定セル①)
以下のコードを実行すると、指定セルを別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsm')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#ws1のセルをws2にコピー
ws2['A1'].value = ws1['B2'].value
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」のセル [B2] をコピーして、「Sheet2」に貼り付けます。

別シートにコピー(特定セル②)
以下のコードを実行すると、特定セルを別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsm')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#ws1のセルコピー
copy = ws1.cell(row = 2, column = 2).value
#ws2へ転記
ws2.cell(row = 1, column = 1, value = copy)
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」のセル [B2] をコピーして、「Sheet2」に貼り付けます。

別シートにコピー(特定行)
以下のコードを実行すると、特定の行を別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsm')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#コピー開始行
i = 1
#ws1のセルをループ
for row in ws1.iter_rows():
for cell in row:
#2行目だったら
if cell.row == 2:
#ws1の値をws2に転記
ws2.cell(row=1, column=i).value = cell.value
i = i + 1
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」の2行目をコピーして、「Sheet2」に貼り付けます。

別シートにコピー(複数行)
以下のコードを実行すると、特定の複数行を別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsx')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#ws1のセルをループ
for row in ws1.iter_rows():
#行のデータを取得
cells = [v.value for v in row]
for cell in row:
#2行目か4行目だったら
if cell.row == 2 or cell.row == 4:
#ws1の値をws2に転記
ws2.append(cells)
break
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」の離れた行をコピーして、「Sheet2」に転記します。

別シートにコピー(特定列)
以下のコードを実行すると、特定の列を別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsx')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#コピー開始行
i = 1
#ws1のセルをループ
for row in ws1.iter_rows():
for cell in row:
#2列目だったら
if cell.col_idx == 2:
#ws1の値をws2に転記
ws2.cell(row=i, column=2).value = cell.value
i = i + 1
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」の2列目をコピーして、「Sheet2」に貼り付けます。

別シートにコピー(複数列)
以下のコードを実行すると、複数の特定列を別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsx')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#転記開始行
i = 0
#コピーする列を変数格納
mylist = [2,4]
#変数をループ
for list in mylist:
#ws1のセルをループ
for row in ws1.iter_rows():
for cell in row:
#変数と一致する列だったら
if cell.column == list:
#1行目だったら
if cell.row == 1:
i = i + 1
#ws1の該当セルをコピー
copy = ws1.cell(row = cell.row, column = cell.column).value
#ws2へ貼り付け
ws2.cell(row = cell.row, column = i, value = copy)
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」の2列目・4列目をコピーして、「Sheet2」に貼り付けます。

別シートにコピー(指定範囲)
以下のコードを実行すると、特定範囲のデータを別シートにコピーします。
import openpyxl
#エクセルファイルを開く
wb = openpyxl.load_workbook('C:/Users/admin/Desktop/テスト/test.xlsx')
#シートを変数格納
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
#ws1のセル範囲をループ
for row in ws1["C2:F10"]:
#ws1の行のデータを取得
cells = [v.value for v in row]
#ws1のデータをws2に転記
ws2.append(cells)
#別名で保存
wb.save('C:/Users/admin/Desktop/テスト/testコピー.xlsx')
「Sheet1」の指定範囲 [“C2:F10”] をコピーして、「Sheet2」に貼り付けます。

※条件書式、罫線、背景色は別シートにコピーしません。
動作環境
Python 3.7.4
openpyxl 3.0.5
この記事がお役に立ちますと幸いです。
・【Python】エクセルを自動処理する方法まとめ

「Python 1年生 体験してわかる!会話でまなべる!」
初めての方でも安心して取り組めるように丁寧に解説
簡単なサンプルを作りながら、対話形式でプログラミングまで紹介
人工知能の導入としてもオススメの1冊です!