python openpyxl Excel xlookup関数の作成
pythonのopenpyxlライブラリを使用し、Excelのxlookup関数のようなプログラムを作る。
指定列のセルのデータを、他のワークシートの指定された列から検索し一致したら同じ行の異なる列のデータを返す。
例:
ワークシートサンプルのA列「ID番号」を、ワークシートlookupのA列で検索し、同じなら同行のC列とD列をそれぞれサンプルのB列、D列に転記する。
import openpyxl
# excelファイル読込み
wb = openpyxl.load_workbook('サンプル.xlsx')
# ワークシート指定
ws = wb['サンプル']
ws_lookup = wb['lookup']
# 検索する列名を変数に代入、列の最大行を取得
column = 'A'
row_max = ws.max_row
# lookup対象列名を変数に代入、列の最大行を取得
column_lookup = 'A'
row_max_lookup = ws_lookup.max_row
# 指定列のセルのデータを、指定された列から検索し一致したら同じ行のデータを返す
# 1つ目のfor文で指定列の2行目から最終行までのデータを順に取得する
# 2つ目のfor文で検索する指定列の2行目から最終行までのデータを順に取得する
# if文でセルデータの一致を判定し、一致した場合、他列の同行データを入力する
for row in range(2, row_max + 1):
data = ws[f'{column}{row}'].value
for row_lookup in range(2, row_max_lookup + 1):
data_lookup = ws_lookup[f'{column_lookup}{row_lookup}'].value
if data == data_lookup:
ws[f'B{row}'] = ws_lookup[f'C{row_lookup}'].value
ws[f'D{row}'] = ws_lookup[f'D{row_lookup}'].value
break
# Excel保存
wb.save('サンプル.xlsx')
検索するワークシートを指定
ws = wb['サンプル']
lookup対象ワークシートを指定
ws_lookup = wb['lookup']
検索する列名を変数に代入、列の最大行を取得
column = 'A'
row_max = ws.max_row
lookup対象列名を変数に代入、列の最大行を取得
column_lookup = 'A'
row_max_lookup = ws_lookup.max_row
1つ目のfor文で指定列の2行目から最終行までのデータを順に取得する。
for row in range(2, row_max + 1):
data = ws[f'{column}{row}'].value
2つ目のfor文で検索する指定列の2行目から最終行までのデータを順に取得する。
for row_lookup in range(2, row_max_lookup + 1):
data_lookup = ws_lookup[f'{column_lookup}{row_lookup}'].value
if文でセルデータの一致を判定し、一致した場合、他列の同行データを入力する。例の場合はC列のデータをB列に入力、D列のデータをD列に入力。
if data == data_lookup:
ws[f'B{row}'] = ws_lookup[f'C{row_lookup}'].value
ws[f'D{row}'] = ws_lookup[f'D{row_lookup}'].value
break
もしlookup参照列にデータが重複している場合、
if文の最後に「break」を付けることで最初に一致した行のデータを取得し、
「break」を付けないことで最後に一致した行のデータを取得する。