見出し画像

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」を付けないことで最後に一致した行のデータを取得する。


いいなと思ったら応援しよう!