#はじめに
Excelでブックやシートをまたいで、複数列のデータをコピペしたいときありませんか?
この記事では、Pythonを使ってExcel上でこれを実行する方法を解説します。
今回は架空の会社の社員データ.xlsxと評価データ.xlsxという2つのブックを例に、コードの書き方を説明していきます。
##準備
まず初めに必要なライブラリをインポートしておきましょう。
import os
import openpyxl as px
osはカレントディレクトリの確認や変更といった、OSの機能をPythonで使うためのライブラリです。後述するように、今回は利用したいExcelファイルのあるディレクトリに異動するために使います。
openpyexcelは、PyhtonでExcelを利用するときに使うライブラリです。今回に限らずPythonでExcelを操作するときは、必ずインポートしておきましょう。
##ワークブックとワークシートの読み込み
必要なライブラリをインポートしたら下記のように、使うワークブックとワークシートを読み込みます。
#該当ファイルのあるディレクトリに異動
os.chdir('C:\\Users\\ユーザー名\\Documents\\Qiita用サンプル')
#社員データのワークブックとワークシートを読み込み
wb1 = px.load_workbook('社員データ.xlsx')
ws1 = wb1['基本情報']
ws2 = wb1['経歴']
#評価データのワークブックとワークシートの読み込み
wb2 = px.load_workbook('評価データ.xlsx')
ws3 = wb2['評価']
まずはos.chdir()でカレントディレクトリを移動します。Users以降は人によってパスが違うと思いますが、とにかく扱いたいExcelファイルのあるフォルダのパスを入れてください。
ワークブックの読み込みは、px.load_workbook(ファイル名)で行います。カレントディレクトリを正しく移動できていれば、絶対パスではなくファイル名だけで読み込むことができます。
そのあとws1 = wb1[シート名]という感じでワークシートを読み込みます。社員データ.xlsxにはシートが2つ存在するため、今回はws1、ws2という風に2回読み込んでいます。
ワークブックが複数ある場合は、上記コードのように変数名を変えて同じようにpx.load_workbook()で読み込んでいきます。
##シートをまたいで指定した列をコピペ
それではいよいよ、シートをまたいだコピペをしていきます。
今回は社員データブックの経歴シートの"高校", "大学"カラムをコピーして。基本情報シートのE列とF列にペーストしたいと思います。
C、D列を最後までコピーして
基本情報シートのE、F列に貼り付けたい
まずコードは下記のようになります。
def copy_paste1():
for i in range(1, ws2.max_row + 1):
highschool = ws2.cell(row = i, column = 3).value
ws1.cell(row = i, column = 5, value = highschool)
bachelor = ws2.cell(row = i, column = 4).value
ws1.cell(row = i, column = 6, value = bachelor)
i += 1
wb1.save(filename = '社員データ.xlsx')
copy_paste1()
コピペを行うセルが1つの時はfor文はいりませんが、今回のように複数のセルを扱う場合はfor文のループ処理を利用すると簡単です。
rangeのスタートはコピーしたい行を指定しましょう。今回はヘッダーを含めてコピーしたいので1を指定しています。もしヘッダーを除いてコピーしたい場合は、2を指定しましょう。
そしてrangeの終了値ですが、max_row + 1と書くことでデータが入ってるカラムの最後までループを行うことができます。max_rowはデータが入っているセルをカウントして、最終行が何行目かを教えてくれるメソッドです。
ちなみに+1するのは、range()の性質で終了値をカウントしてくれないためです(例えばRange(0,10)とした場合はカウントされるのは0~9までですよね?)。
ちなみに最後にi += 1と書いてますが、Pythonの性質上この記載がなくても勝手にiが1ずつ加算されるので本例は不要です。本コードでは見た目をわかりやすくするために、あえて記載しております。
正しくコードが書けていれば、このようになるでしょう。
import os
import openpyxl as px
#該当ファイルのあるディレクトリに異動
os.chdir('C:\\Users\\ユーザー名\\Documents\\Qiita用サンプル')
#社員データのワークブックとワークシートを読み込み
wb1 = px.load_workbook('社員データ.xlsx')
ws1 = wb1['基本情報']
ws2 = wb1['経歴']
#評価データのワークブックとワークシートの読み込み
wb2 = px.load_workbook('評価データ.xlsx')
ws3 = wb2['評価']
def copy_paste1():
for i in range(1, ws2.max_row + 1):
highschool = ws2.cell(row = i, column = 3).value
ws1.cell(row = i, column = 5, value = highschool)
bachelor = ws2.cell(row = i, column = 4).value
ws1.cell(row = i, column = 6, value = bachelor)
i += 1
wb1.save(filename = '社員データ.xlsx')
copy_paste1()