はじめに
Excelでデータを扱うとき、こんな作業をしていませんか?
- VLOOKUPで別シートから値を引く
- XLOOKUPで検索して値を取得する
- 複数条件になると式がどんどん長くなる
これ、全部ちゃんとできているので問題はありません。
特にXLOOKUPはかなり優秀です。
ただ結論だけ先に言うと👇
👉 その作業、DataFrameを使うと「一度書くだけ」で終わります
まず前提:XLOOKUPは優秀(でも限界あり)
XLOOKUP はとても便利です。
=XLOOKUP(A2, A:A, B:B, "見つからない")
- 列番号不要
- 左も右も検索できる
- エラー時の値も指定できる
👉 VLOOKUPの弱点はほぼ解消されています
なので👇
👉 単発作業ならXLOOKUPで十分です
でも現場ではこうなる
ケース:複数条件で検索したい
やりたいこと
「商品ID」と「日付」の両方が一致するデータを取得したい
Excelでの対応(ちょっと無理やり)
XLOOKUPで複数条件
=XLOOKUP(A2&B2, Sheet2!A:A&Sheet2!B:B, Sheet2!C:C)
何をしているか
- 商品IDと日付を結合
- 疑似的に複数条件検索
正直なところ
- 式の意味が分かりにくい
- データが増えると重い
- 日付フォーマット違いで事故る
👉 「できるけど、ちょっと無理してる」状態
DataFrameならこうなる(シンプルすぎる)
# ファイル名: dataframe_multi_key_lookup_v001.py
# pip install pandas openpyxl
import pandas as pd # pandasを読み込む
# 売上データ
df_sales = pd.read_csv("sales.csv") # 売上データ
# マスタデータ
df_master = pd.read_csv("master.csv") # マスタデータ
# 商品ID + 日付で結合(これがVLOOKUP/XLOOKUPの代わり)
df = pd.merge(
df_sales,
df_master,
on=["商品ID", "日付"], # 複数条件をそのまま指定
how="left"
)
# Excelとして出力
df.to_excel("output.xlsx", index=False)
何がすごいのか
① 書き方がそのまま意味になる
on=["商品ID", "日付"]
👉 「この2つで一致」がそのまま書ける
② 無理やりテクニックが不要
Excel👇
👉 文字連結で対応
DataFrame👇
👉 標準機能
③ ミスが減る
- 範囲指定ミスなし
- 式崩れなし
- コピペ不要
④ 大量データでも強い
👉 数万行でも普通に処理できる
⑤ 一度書けばずっと使える
👉 毎回関数を貼る必要なし
そして一番大事なこと
👉 最後はExcelに戻せる
df.to_excel("output.xlsx", index=False)
つまり👇
- 処理はPythonで自動化
- 確認はExcel
👉 今の業務フローは変えなくてOK
Excel vs DataFrame(リアルな違い)
| 項目 | Excel(XLOOKUP) | DataFrame |
|---|---|---|
| 単発作業 | ◎ | △ |
| 複数条件 | △ | ◎ |
| 可読性 | △ | ◎ |
| ミス防止 | △ | ◎ |
| 自動化 | × | ◎ |
結論
- VLOOKUP → 正直つらい
- XLOOKUP → かなり優秀
- DataFrame → 作業そのものを消す
最後に
もし今👇こうなら
- XLOOKUPを毎回使っている
- 複数条件で悩んでいる
- 同じ作業を繰り返している
👉 それはサインです
「関数で頑張るフェーズ」は終わりで、
「自動化するフェーズ」に入るタイミングです。
最初の一歩
import pandas as pd
df = pd.read_csv("data.csv")
df.to_excel("output.xlsx", index=False)
👉 「Excelを開く前に、Excelが完成している世界」になります。
The following two tabs change content below.
ストレスフリー
うつ病の子育て中の金融系システムエンジニアです。
名もなき家事、目的のない仕事、見えない不自由、チリツモストレスを見つけ出して、設備投資、システム化、見える化により、解決します。
習い事で、ドラムをしていました。
最新記事 by ストレスフリー (全て見る)
- Excelしか知らない人へ:VLOOKUP・XLOOKUPで頑張っているなら、DataFrameを使わないと正直もったいない - 2026-03-20
- PythonでOracle接続にハマった話(64bit問題とtnsnames.oraの落とし穴) - 2026-03-20
- Android Studio Panda 2(2025.3.2)をインストールしてみた - 2026-03-20
