「Python in Excel」入門:コードを読むための基礎知識

対応するMicrosoft 365のExcelで利用できる「Python in Excel」(=PY関数)のコードを読むための入門解説です。
本稿は、Pythonの文法を一から体系的にプログラミング学習するための記事ではありません。
※本記事の数式および解説文章の多くは、生成AIを活用して作成しました。数式動作や解説文の最終的な内容は人間による確認・編集を経て掲載しています。
第1章:「Python in Excel」の正体とAIコードの基本構造
第2章:ライブラリ環境と自動インポート(import)のルール
第3章:記号( . ( ) [ ] \ )とメソッドチェーンの読み解き方
第4章:データの「形」・変数の流れ・スピル展開を理解する
第5章:AIコードで頻出する構文(if / lambda / apply)
第6章:現場でそのまま使える!4つの微修正テクニック(+変数名変更の注意)
第7章:途中変数によるデバッグと「AIコード検証」4原則
第8章:総仕上げ・AIコードを読む「5秒診断フロー」
【補足:AI活用とセキュリティ・困ったときの調べ方】
おわりに:「Python in Excel」とAIの正しい付き合い方
導入:Pythonを「体系的に学ばず」に「読む」ためのアプローチ
従来、こうしたプログラミング機能を活用するには、Pythonの文法やPandasなどの各種ライブラリの書き方を体系的にマスターする必要がありました。
しかし、生成AIが普及した現在、学習のアプローチは大きく変わっています。
AIは基本的な集計処理から複雑なグラフ描画、`def` を使った自作関数の定義までコードを瞬時に生成できます。
- 自分のシートのセル範囲や項目名と合っていないが、どこを直せばいいか分からない
- エラーが出たときに、原因がExcel側にあるのかPythonコード側にあるのか判別できない
- コードが「動いてはいる」が、算出された数値が依頼通りの計算結果なのか確信が持てない
「変数には何が入っているか」「そのデータがどこから来て、どの処理を経たか」「最後に何が返されているか」という構造を読み解くためだけに特化した、読解専用の基礎知識を整理します。
第1章:「Python in Excel」の正体とAIコードの基本構造
1. 「Python in Excel」の正体:クラウドで実行され最終評価結果をExcelへ返す
自分のPCにPythonをインストールしたり環境構築を行ったりする必要がなく、クラウド上の隔離された環境で動作します。
xl() 関数でExcelシートの範囲をPythonオブジェクトとして読み込む2. クラウド上のPython環境でデータを保持し、各種ライブラリ(Pandas等)や自作関数で処理・加工する
3. Pythonセルの最後に評価された式の結果が、そのPythonセルの計算結果になる
return はExcelへ直接出力する命令ではなく、関数の呼び出し元へ値を返す命令です。自作関数を使う場合は、return で返された値を受け取る関数呼び出しをPythonセルの最後で評価することで、その結果がExcelへ返されます。また、Pythonの計算結果は、Excel側の出力設定によってPythonオブジェクトとして1セルに保持することも、Excel値へ変換してセルに出力することもできます。
2. 注意すべきルール:大文字・小文字の厳密性と「インデント(字下げ)」
- 論理値・定数:
True/False(先頭大文字:正しい)とtrue/false(小文字:エラー) - 文字列比較・列名参照: "Sales" と "sales"、あるいは "売上" と "売上 "(末尾スペースあり)は別の文字として扱われます
{ } や End If の代わりに、「行頭のインデント(スペース)」で処理のブロック構造を表現します。そのため、不要なインデントが入ったり、必要な字下げがズレたりすると即座に動作せずエラー(IndentationError)になります。
# 正しい構造(def や if の配下をスペース4文字で字下げ)
def add_tax(price):
return price * 1.1 # ← インデントされている部分が関数の中身
# 構文エラーになる例(インデントのズレや不必要な行頭スペース)
df = xl("A1:D100", headers=True) # ← 行頭に不要なスペースがあるとエラー3. AIコードの基本構造と `def` 関数の読み方
# ① 入力:ExcelのデータをPythonに取り込む(headers=Trueで1行目を項目名にする)
df = xl("A1:D100", headers=True)
# ② 処理:データの加工・集計
df_filtered = df[df["売上金額"] >= 10000]
summary_df = df_filtered.groupby("店舗名")["売上金額"].sum()
# ③ 出力:最終行に書かれた変数がセルに返される
summary_dfdef 関数定義形式(return で戻り値を返し、最後に関数を呼び出す)】def を使ったコードが生成されます。
# 関数定義:def 関数名(引数):
def summarize_sales(data_range):
df = data_range
df_filtered = df[df["売上金額"] >= 10000]
summary_df = df_filtered.groupby("店舗名")["売上金額"].sum()
return summary_df # ← 関数の呼び出し元へ結果(戻り値)を返す
# 関数の呼び出し(呼び出し結果がExcelのセルに出力される)
summarize_sales(xl("A1:D100", headers=True))def 関数名(引数):: 処理の塊(自作関数)を定義する命令です。return 戻り値: 処理結果として関数の呼び出し元へ値を返す命令です。
| パターンA:スクリプト形式(最終行が出力) | パターンB:def関数形式(return → 関数呼び出し) |
|
|
#(ハッシュ)を使ったコメントの記述が可能です。# 以降の文字列は処理上完全に無視されます。AIにプロンプトを出す際は、「処理のまとまりごとに、何をしているか分かる日本語のコメントを入れてください」と一言添えておくと、コード内部に分かりやすい解説が入るため解読が劇的に楽になります。
第2章:ライブラリ環境と自動インポート(import)のルール
そのため、ローカルPCへPythonをインストールする必要はありません。一方で、通常のローカルPython環境のように
pip installで任意のライブラリを追加する使い方ではなく、Python in Excelで利用可能なライブラリの範囲内で使用します。標準で読み込まれている主要ライブラリのルールを押さえておきましょう。
| ライブラリ名 | エイリアス(略称) | 自動ロード(import不要) | 主な実務用途 |
| Pandas | pd | ○(自動) | 表データ(DataFrame)の集計・加工・抽出・結合・ソート |
| NumPy | np | ○(自動) | 高度な数値計算、多次元配列処理、条件分岐(np.where等) |
| Matplotlib (pyplot) | plt | ○(自動) | 基本的なグラフ描画・チャートの装飾 |
| Seaborn | sns | ○(自動) | デザイン性の高い高度な統計グラフ描画 |
| statsmodels | sm | ○(自動) | 統計モデルの構築・回帰分析 |
| scikit-learn | sklearn | ×(要import) | 機械学習・クラスタリング等の専門処理 |
【自動インポートと明示的インポートの違い】
xl() 関数をはじめ、pandas (pd)、numpy (np)、matplotlib.pyplot (plt)、seaborn (sns)、statsmodels (sm) などの主要ライブラリがあらかじめ自動でロードされています。そのため、標準ロードされているライブラリについては、コード内に重複して書かれている
import を削除しても通常は問題なく動作します。一方、
scikit-learn など自動ロード対象外の外部ライブラリを使用する場合は、コードの先頭に明示的に import を記述する必要があります。pd. や plt.、sns. が頭に付いている部分は、「そのライブラリの機能を使っている」と読み解けば十分です。Python in ExcelのPythonコードは、ローカルPCのファイルへ直接アクセスしたり、インターネットへネットワーク要求を送ったりすることはできません。
そのため、AIが一般的なPythonコードとして
pd.read_csv("C:/...")、pd.read_excel(...)、requests.get(...)、pip install ... などを提案しても、そのままPython in Excelで使えるとは限りません。外部データはExcelまたはPower Query経由で取り込むのが基本です。第3章:記号( . ( ) [ ] \ )とメソッドチェーンの読み解き方
ここではPython一般の厳密な文法定義ではなく、「Python in Excel」でAIが生成するコードを読む際によく登場する記号の読み方に絞って解説します。
| 記号 | 解読上の読み方・役割 | 具体的な解読例 |
| .(ドット) | 「~の」「~に対して処理を実行」 | df.groupby(...) (dfに対してグループ化を実行) |
| ( )(カッコ) | 関数やメソッドを呼び出し、引数を指定する | xl("A1:D100") (A1:D100を引数としてxl関数を呼び出す) |
| [ ](角カッコ) | 列の抽出・複数列指定・条件による絞り込み | df["売上金額"] や df[["店舗名", "売上金額"]] |
| \(バックスラッシュ) | 処理が次の行へ継続していることを表す | df.groupby("店舗名") \ (改行して次の処理へ続く) |
※
[ ] はPython一般では、リストの作成、インデックス指定、スライスなどにも使われます。ここでは、Python in Excelで頻出するPandasコードの「列抽出・複数列指定・条件抽出」に絞って説明しています。. で処理が横に長く繋がっている記述(メソッドチェーン)が多用されます。result = df.groupby("店舗名")["売上金額"].sum().reset_index()コードを読む際は、左から順に処理の繋がりを追いかけていくと簡単に解読できます。
df: 元の表データを用意する.groupby("店舗名"): 店舗名ごとにグループ化した状態を作る["売上金額"]: その中から集計対象の「売上金額」列を取り出す.sum(): グループごとの合計値を計算する.reset_index(): 集計などによってインデックス(見出し)になった項目を通常の列に戻し、Excelで扱いやすい表形式に整える
【複数行に折り返されたメソッドチェーンの読み方】
- 全体をカッコ
( )で囲むパターン: 外側のカッコ( )内の改行は無視されるため、「一番外側の閉じカッコまでが1つの処理の塊」として読み進めます。 - 末尾に
\(バックスラッシュ)を置くパターン: 行末にある\は「処理がまだ終わっておらず、次の行へ続いている」という意味を持ちます。
第4章:データの「形」・変数の流れ・スピル展開を理解する
| 店舗名 | 商品名 | 売上金額 |
| 東京店 | 商品A | 12,000 |
| 大阪店 | 商品B | 8,000 |
| 名古屋店 | 商品C | 15,000 |
| 福岡店 | 商品D | 7,000 |
この表を、次のコードでPythonに取り込みます。
df = xl("A1:C5", headers=True)dfに入ります。Excelの表(4行・3列)
↓ xl()
DataFrame(4行・3列)
↓
df
df_filtered = df[df["売上金額"] >= 10000]
| 店舗名 | 商品名 | 売上金額 |
| 東京店 | 商品A | 12,000 |
| 名古屋店 | 商品C | 15,000 |
つまり、
df 4行・3列
↓ 売上金額 >= 10000
df_filtered 2行・3列
result = df_filtered["売上金額"]
df_filtered 2行・3列
↓ ["売上金額"]
売上金額 要素数2の1次元データ
↓
Series
result = df_filtered["売上金額"].sum()
Series
12,000
15,000
↓ .sum()
単一の数値
27,000
DataFrame(表:2次元)
↓
Series(Python内部では1次元データ / Excel値として出力すると1列に展開できる)
↓
Scalar(値:単一の数値)
| 処理 | データの形 | 変化 |
xl() |
DataFrame(4行・3列) | Excelの表を取り込む |
df[df["売上金額"] >= 10000] |
DataFrame(2行・3列) | 条件に合わない2行を除外 |
df_filtered["売上金額"] |
Series(要素数2・1次元) | 1列だけ取り出す |
.sum() |
単一の数値 | 合計する |
df = xl("A1:C5", headers=True)
↓
df【4行・3列の表】
↓
df_filtered = df[df["売上金額"] >= 10000]
↓
df_filtered【2行・3列の表】
↓
df_filtered["売上金額"]
↓
【2行のSeries】
↓
.sum()
↓
result
【27,000】
df
↓
df_filtered
↓
result
4行・3列
↓
2行・3列
↓
要素数2の1次元データ
↓
1つの数値
Excel値として出力した場合は、結果が複数行・複数列ならスピル(動的配列)として周囲のセルへ展開されます。出力先の範囲に既存データがある場合は
#SPILL! になります。一方、Pythonオブジェクトとして返した場合は、DataFrameオブジェクトがカード付きの1セルとして保持されます。
第5章:AIコードで頻出する構文(if / lambda / apply)
AIはコード生成時、Excelの関数に似た条件分岐や、行ごとの反復処理を行うために特定の構文を好んで使います。前章で学んだDataFrameやSeriesの考え方をベースに、「何をしているか」を読み解きましょう。
np.where です。条件・真の場合・偽の場合を指定する考え方は、Excelの IF(条件, 真の場合, 偽の場合) とよく似ています。
# Excelの IF(A2>=10000, "高額", "通常") と同じ考え方
df["判定"] = np.where(df["売上金額"] >= 10000, "高額", "通常")
def を使った自作関数内では、通常の if ~ else のブロック構文が生成されることもあります。apply と lambda はよく登場する組み合わせの一つです(.str[:3] のように直接処理されることもあります)。lambda(ラムダ)は「名前のない小さな関数」と考えると読みやすくなります。この例の Series.apply() では、「x(列の各要素の値)を受け取って、後ろの処理をして返す」と読めば十分です。
# 「商品名」列の各データ(x)の先頭3文字だけを切り出す
df["商品コード"] = df["商品名"].apply(lambda x: str(x)[:3])
# df_filtered の行数(データ件数)を取得する
data_count = len(df_filtered)
第6章:現場でそのまま使える!4つの微修正テクニック(+変数名変更の注意)
テクニック1:データ範囲(参照セル・シート名)の変更
xl() 内のセル範囲文字列を書き換えます。別シートのデータを参照したい場合は、Excel数式と同様にシート名を付与します。
- 修正前(自シート):
df = xl("A1:D100", headers=True) - 修正後(自シート範囲変更):
df = xl("B5:E500", headers=True) - 修正後(別シート参照):
df = xl("'売上データ'!A1:D100", headers=True)
headers=True は「1行目を見出しとして扱う」という重要な指定です。これが欠けると列名が 0, 1, 2... という数値に置き換わってしまい、エラーの原因になります。テクニック2:対象の列名(項目名)の変更
# 修正前:AIが書いたコード("売上金額"列で集計)
result = df.groupby("店舗名")["売上金額"].sum().reset_index()
# 修正後:"請求金額"列で集計するように変更
result = df.groupby("店舗名")["請求金額"].sum().reset_index()テクニック3:昇降順(ソート順)や条件値の切り替え
# 修正前:売上金額10000以上のデータを抽出
df_filtered = df[df["売上金額"] >= 10000]
# 修正後:売上金額50000より大きいデータを抽出
df_filtered = df[df["売上金額"] > 50000]
- 昇順(小さい順 / A-Z):
ascending=True - 降順(大きい順 / Z-A):
ascending=False
テクニック4:出力結果・戻り値(最終行と return)の変更
return の対象を変更し、その関数呼び出しをPythonセルの最後で評価します。df = xl("A1:D100", headers=True)
df_filtered = df[df["売上金額"] >= 10000]
summary_df = df_filtered.groupby("店舗名")["売上金額"].sum().reset_index()
total_val = df_filtered["売上金額"].sum()
# 最後に出力したい変数を1つだけ置く
# summary_df :店舗別の集計表
# df_filtered :抽出後の明細
# total_val :全体の合計値
summary_dfreturn と、その関数を呼び出している最終行の両方を確認してください。コード内の変数名(例:
df_filtered)を自分の分かりやすい名前(例: sales_data)に変更する場合は、その変数を後続の処理で参照しているすべての箇所の名前も一括して変更する必要があります。1箇所でも変更漏れがあると「名前が見つからない(NameError)」の原因になります。
第7章:途中変数によるデバッグと「AIコード検証」4原則
1. 「途中変数を最終行に置いて確認する」デバッグ手法
df = xl("A1:D100", headers=True)
df_filtered = df[df["売上金額"] >= 10000]
result = df_filtered["売上金額"].sum()
result # ← ここでエラーまたは不自然な数値が出た場合- 最終行を
dfに指定して実行 → データの取り込み段階で正しく読み込めているか状態を確認 - 最終行を
df_filteredに指定して実行 → 絞り込み後のデータ件数や内容が正しいか状態を確認 - 最終行を
resultに戻して実行 → 集計処理の段階で問題が起きていることを特定
2. エラーメッセージの読み方と対処法
- SyntaxError : カッコ
()の閉じ忘れや、カンマ,の抜けなどの文法的なミスです。AIが長いメソッドチェーンを生成した際に末尾のカッコが落ちて発生することがあります。 - IndentationError : インデント(字下げ)のズレが原因です。行頭に不要なスペースが入っていないか確認してください。
- KeyError: 'XXX' : 指定した列名 'XXX' がデータ内に存在しません。Excel側の見出し名と完全一致しているか確認してください。また、
xl()でheaders=Trueが抜けている場合も発生します。 - NameError : 定義されていない変数や関数を呼び出しています。実務では以下のような変数名のタイポが非常に多発します。
result = 100 results # ← 最後に 's' が付いているため NameError が発生
- AttributeError : そのオブジェクトが持っていない属性やメソッドを呼び出した場合に発生します。例えば、単一の数値に対して
.groupby()のようなDataFrame用の処理を呼び出した場合などです。 - TypeError : その処理では扱えない型を渡したり、互換性のない型同士を演算した場合に発生します。例えば、数値と文字列をそのまま加算しようとした場合などです。
- ValueError : 型としては受け付けられるものの、その値の内容が処理に適さない場合に発生します。例えば
int("abc")のように、数値へ変換できない文字列を数値化しようとした場合などです。
3. 人間による「AIコード検証」の4大原則
AIのコードを実務に組み込む際は、必ず以下の4項目を人間が検証してください。
| 検証項目 | チェック内容 | 不備があった場合の対処 |
| 1. 入力データの妥当性 | xl() で指定した参照範囲やヘッダーの有無が正しく設定されているか |
範囲文字列や headers=True を修正 |
| 2. 処理ロジックの一致 | 指示した条件(以上/超える、AND/OR条件など)がコードに正しく反映されているか | 条件演算子(>= や >)をチェック・微修正 |
| 3. 出力結果の不整合チェック | 手計算やExcelのAutoSumなどによる簡易チェックと一致するか | 途中変数を出力して集計ロジックを検証 |
| 4. 集計単位・分析軸の妥当性 | groupby("店舗名") とすべき箇所が groupby("商品名") になっていないか等、分析の切り口が正しいか |
groupby() 等に指定された列名を確認・修正 |
第8章:総仕上げ・AIコードを読む「5秒診断フロー」
以下の6つの確認ポイントを上から順に流し見するだけで、コード全体の構造を素早く把握できます。
① 【入力】 xl() を探す
(どのセル範囲を取り込んでいるか?)
↓
② 【変数】 df などの最初の受け皿を探す
(データがどの変数に入ったか?)
↓
③ 【列名】 列名の完全一致をチェックする
(KeyErrorを防ぐため、Excelの見出しと合っているか?)
↓
④ 【抽出】 [ ] による条件抽出を探す
(どの条件でデータを絞り込んでいるか?)
↓
⑤ 【集計】 .groupby() や .sum() などの処理を探す
(何を単位にして、何の計算をしているか?)
↓
⑥ 【出力】 Pythonセルの最終行を見る
(関数を使っている場合は、関数内のreturnと最後の関数呼び出しも確認)
この順番に視線を動かすだけで、数百行の複雑なコードであっても「どこで何をしているか」の骨格を瞬時に捉えることができます。
【補足:AI活用とセキュリティ・困ったときの調べ方】
AIにコードを作成させる際は、具体的な個人情報や機密データを直接入力せず、ヘッダー名(項目名)やダミーの範囲指定だけで質問できないか検討すると、情報露出のリスクを下げられます。ただし、項目名自体が機密情報になる場合もあるため、最終的には組織の利用ルールに従ってください。
ただし、「AIに丸投げすれば確実」というわけではなく、本稿で学んだ「どの段階でエラーが起きているか」の途中経過を伝えて質問することが大切です。
- AIへのデバッグ依頼例:
「Python in Excelでエラーが出ます。dfの読み込みは正常に行えていますが、df_filtered = df[df["売上金額"] >= 10000]の行で KeyError が発生します。見出し名は『売上金額』ですが、原因と修正コードを教えてください。」
おわりに:「Python in Excel」とAIの正しい付き合い方
最後に、本稿の重要ポイントを振り返ります。
- 本稿のゴールは「ゼロから書くこと」ではない:AIが書いたコードの構造を理解し、現場に合わせて微修正・検証できることが目的
- 出力・戻り値の仕組み:Pythonセルでは最終式の評価結果がセルの結果になる。
returnは関数の呼び出し元へ値を返し、その関数呼び出しを最終行で評価するとExcelへ結果を返せる - 記号とチェーンを解読する:
.(~の)、()(呼び出し)、[](抽出)、\(行継続)の意味を理解し、ドットで繋がった処理は左から順に繋がりを追う - データの「形」と変数の流れを追う:表(DataFrame) → 列(Series) → 単一数値 という形の変化と、変数の参照の連鎖(引き継ぎ)を意識する
- 5秒診断フローで全体像を捉える:入力(xl)から最終行(関数の場合はreturnと関数呼び出し)まで、コードの視線の動かし方を習慣化する
- 途中変数を出力してデバッグする:動かない時は最終行に手前の変数を置いて、どの段階まで正常か検証する
- 「動く=正しい」ではない:エラーなく動いたコードでも、条件値や集計結果(4原則)が意図通りか人間が必ず検証する
「変数には何が入っているか」「そのデータがどこから来て、どの処理を経たか」「最後に何が返されているか」という構造を読み解き、直し、そして結果を適切に検証する力を身につけることで、AIを真の強力なパートナーとして活用できるようになります。
=PY を呼び出し、高度なデータ処理や業務効率化に役立ててください。同じテーマ「エクセル関数応用」の記事
配列を自在に回転させる数式
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算
2段階の入力規則リスト作成:最新関数対応
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン
「SUMIFSで動くのにXLOOKUPでエラー?」型不一致の関数別挙動
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化
Excel表とMarkdownテーブルを相互変換する数式
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方
「Python in Excel」入門:コードを読むための基礎知識
新着記事NEW ・・・新着記事一覧を見る
Excelの新機能「リストとセル内配列」:1つのセルに複数の値|エクセル入門(2026-09-28)
Excel関数クロスワード(2026-09-26)
Excelショートカットキークイズ(2026-09-23)
Excel関数名クイズ(2026-09-21)
気ままに一手|リレー将棋(2026-09-20)
ITエンジニアがトラブルを避けるための法律・契約入門|エクセル雑感(2026-09-18)
ITエンジニアなら知らないと恥ずかしい数学20選|エクセル雑感(2026-09-17)
ITエンジニアのための税金と社会保険のお話|エクセル雑感(2026-09-15)
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.
