この記事では、DataFrameの定義、xl関数の使い方や注意点について説明します。DataFrameを使うと、Excelのセル範囲や名前、テーブル、Power Queryのデータを Python in Excel で扱えるようになります。
DataFrameとは
DataFrameとは、2次元データ構造オブジェクトのことで、pandasライブラリ内のオブジェクトの1つです。Python in Excel では、ExcelのデータをPythonで扱えるようにするために、xl関数を使ってDataFrameオブジェクトを生成します。
xl関数の引数には、セル範囲、名前、テーブル、Power Queryを指定することができます。
xl関数の構文
xl( "データ範囲", headers )
戻り値 | DataFrame |
引数 | 型 | 説明 |
---|---|---|
データ範囲 (必須) | string | セル範囲のアドレス or 名称 例)”A1:B6″、”テーブル1″、”テーブル1[#すべて]” ※ テーブルおよびPower Queryではヘッダー行も含める場合、 [#すべて]指定子を名称の後ろにつける |
headers (任意) | bool | データ範囲にヘッダーを含むか 指定しない場合は「False」とみなされる |
xl関数を使ってDataFrameを定義する方法
セル範囲
以下のような表が、A1:B6セルにあるとします。

- STEP1D2セル(どのセルでもOK)に「=py」と入力し、表示されたオートコンプリートリストの「PY」をダブルクリックまたはTabキーで選択して、Python入力モードにします。
- STEP2
- STEP3Ctrl+Enterを押して入力を終了します。
D2セルに「DataFrame」と表示され、DataFrameオブジェクトが定義できました。
DataFrameセル - STEP4
セルアドレスの記述は「$」を使った絶対参照でもOKです。他のシートの範囲指定も可能です。
# 絶対参照
df_1=xl("$A$1:$B$6", headers=True)
# 他のシートの範囲を参照
df_2=xl("Sheet2!$A$1:$E$6", headers=True)
名前、テーブル、Power Query(外部データ)
表が名前、テーブル、Power Query(外部データ)であっても、入力方法は上記と同じです。第1引数には名称が入ります。
# 名前をつけた表の場合
df_1=xl("果物表", headers=True)
テーブルの場合、ヘッダー行も含める場合は [#すべて]指定子を追加し、headers=True と指定します。
# テーブルの場合
# ヘッダー行も含める場合
df_2=xl("テーブル1[#すべて]", headers=True)
# ヘッダー行を含めない場合
df_3=xl("テーブル1", headers=False)


Power Query(外部データ)の場合もテーブルと同じく、ヘッダー行も含める場合は [#すべて]指定子を追加し、headers=True と指定します。
# Power Queryの場合
# ヘッダー行も含める場合
df_4=xl("fruits[#すべて]", headers=True)
# ヘッダー行を含めない場合
df_5=xl("fruits", headers=False)

行の指定(特殊項目指定子)
前セクションでは、ヘッダー行も含めたすべての範囲を指定する方法を紹介しました。
テーブルやPower Query(外部データ)の場合は、[#すべて]指定子以外にも、[#データ]指定子、[#見出し]指定子を使って、それぞれデータ行の範囲、ヘッダー行の範囲のみを取得することができます。
# 「テーブル1」=A3:D8
# F3セル
xl("テーブル1[#すべて]", headers=True)
# F13セル
xl("テーブル1[#データ]")
# F23セル
xl("テーブル1[#見出し]")

列の指定(参照演算子)
前セクションでは、ヘッダー行やデータ行に限定して指定する方法を紹介しました。
テーブルやPower Query(外部データ)の場合は、列も指定することが可能です。
1つの列を抽出する場合は1つの列名を指定し、複数の列を抽出する場合はコロン「:」で抽出対象の先頭列と最後列の列名をつないで指定し、連続した列範囲を取得します。
# 「テーブル2」=A3:D8
# F3セル
xl("テーブル2[営業 担当者]")
# F12セル
xl("テーブル2[[売上金額]:[手数料 (%)]]")
# F22セル
xl("テーブル2[[#すべて],[地域]:[手数料 (%)]]", headers=True)

xl関数の注意点
特殊項目指定子の[#すべて]、[#データ]、[#見出し]指定子は、公式サイトでは [#All]、[#Data]、[#Headers]と記載されていますが、筆者の環境ではエラーとなり指定できませんでした。
日本語環境では[#すべて]、[#データ]、[#見出し] と日本語で指定するようです。
テーブルや Power Query は、ヘッダー行を除いた範囲が名前登録されるみたい…
なので、xl関数では[#すべて]指定子を付けてヘッダー行も含めるように記述する必要があるようです。

