退屈なタスクのために Excel で Python を使い始めたところ、ワークフローが完全に変わりました

in tech

ほとんどの人は、Excel の Python は複雑なデータ分析に使用するものだと考えています。私がこれを便利だと感じたのは、もっと単純な理由からです。いつも後回しにしていたスプレッドシートの仕事に対処するのに役立ちました。複雑な数式や Power Query に頼ることなく、乱雑な名前を分割し、リストを比較し、数値を文書化した分析情報に変換することが、はるかに簡単になりました。

Excel における Python とは何ですか? なぜ気にする必要があるのですか?

厄介なスプレッドシート ジョブを処理する簡単な方法

Python は Excel に直接組み込まれているため、この機能を使用するために別の Python をインストールする必要はありません。 Python 数式を実行すると、Excel は Microsoft のクラウド インフラストラクチャでコードを実行し、結果をセルに直接返します。さらに、Excel の Python は、コンピューターからファイルに直接アクセスするのではなく、ワークシートまたは Power Query を通じてデータを操作するように設計されています。

Excel の Python には、次のような一般的なライブラリを含む Anaconda が提供する環境が含まれています。 pandasこれにより、セットアップを必要とせずに、構造化データの操作と分析がはるかに簡単になります。 Excel の Python は、プログラミング言語を学習するというよりも、従来の数式では解決するのが難しいスプレッドシートのジョブを処理するための別のツールであると考えてください。独自の Python スクリプトを作成するにはプログラミングの知識が必要ですが、始めるのに必要ありません。以下のすべての例は独自のデータに適合させることができ、途中でコードの各セクションが何を行うかについて説明します。

これを試すには、対象となる Microsoft 365 サブスクリプションとワークシート内のデータが必要です。データを Excel テーブルとしてフォーマットする (Ctrl+T) を使用すると、Python での参照が簡単になりますが、セル範囲を使用することもできます。タイプ =PY( セル内 (またはクリック) Python の挿入数式 タブ) をクリックして Python コードの作成を開始し、次を使用します。 xl("Table Name") または xl("Cell References") ワークシート データを Python に取り込みます。結果は Excel のセルに直接返すことができます。

エッジケースにも簡単に対応

私が定期的に避けていたスプレッドシートのタスクの 1 つは、フルネームを姓名列に分割することでした。一見簡単そうに見えますが、データにミドルネームのイニシャル、二重バレルの名前、またはハイフンでつながれた姓が含まれる場合、事態は複雑になり始めます。 LEFT、RIGHT、FIND などの従来のテキスト式は簡単な例を処理できますが、名前が同じパターンに従っていない場合、ロジックを維持するのがすぐに困難になります。 Power Query を使用することもできますが、名前の形式が変わるたびに手順を調整する必要があることがわかりました。

Python を使用すると、この種のクリーンアップに関する独自のルールを定義する方法が得られました。この例では、考えられるすべての命名規則を処理しようとするのではなく、単純なルールベースのアプローチを使用しています。

import pandas as pd

df = xl("T_Names")

def split_name(name):
    parts = name.split()
    if "-" in parts(-1):
        return " ".join(parts(:-1)), parts(-1)
    if len(parts) == 2:
        return parts(0), parts(1)
    return " ".join(parts(:-1)), parts(-1)

result = df.iloc(:, 0).apply(split_name)

pd.DataFrame(result.tolist(), columns=("First Name", "Last Name"))

Excel テーブルを参照したため、Python 数式は更新されたテーブル データを引き続き使用します。テーブルに新しい行を追加すると、その行が含まれるように結果が自動的に更新されます。

何が起こっているかは次のとおりです。

コード

何をするのか

import pandas as pd

テーブルの操作に使用される標準データ分析ライブラリをロードします。

df = xl("T_Names")

T_Names という名前の Excel テーブルを Python に取り込みます。

df.iloc(:, 0)

Python が各名前を個別に処理できるように、インポートされたテーブルの最初の列を選択します。

def split_name(name):

複数の単語を含む名やハイフンでつながれた姓を保持しながら、最後の単語を姓として扱うカスタム ルールを定義します。

pd.DataFrame(..., columns=(...))

Excel で表示できるように、最終的な分割名を 2 つの整った列にパッケージ化します。

Microsoft 365 パーソナル。

OS

Windows、macOS、iPhone、iPad、Android

無料トライアル

1ヶ月

Microsoft 365 には、最大 5 台のデバイスで Word、Excel、PowerPoint などの Office アプリ、1 TB の OneDrive ストレージなどへのアクセスが含まれています。


Python は通常のクリーンアップ作業を行わずに 2 つのリストを比較しました

追加されたもの、削除されたもの、または変更されていないものをすぐに確認できます

前後のリストを比較する必要がある場合、私が通常使用したオプションは、ヘルパー列、検索式、または Power Query の結合でした。それらはすべて機能しましたが、リストが増えるにつれて管理が難しくなりました。

この例では、2 つの在庫リスト間で何が追加、削除、または変更されているかを識別するには、数行の Python で十分でした。このアプローチではセットを使用するため、重複を追跡する必要がない一意のアイテムを比較する場合に最適に機能します。

import pandas as pd

old = set(xl("T_Old").iloc(:, 0))
new = set(xl("T_New").iloc(:, 0))

results = ()
for item in sorted(old | new):
    if item in old and item in new:
        status = "Unchanged"
    elif item in new:
        status = "Added"
    else:
        status = "Removed"
    results.append((item, status))

pd.DataFrame(results, columns=("Item", "Status"))

コードの仕組みは次のとおりです。

コード

何をするのか

old = set(xl("T_Old").iloc(:, 0)) / new = set(xl("T_New").iloc(:, 0))

両方の Excel テーブルから項目を Python に抽出してセットに変換し、各リストに表示されるエントリを比較しやすくします。

sorted(old | new)

両方のセットを一意の項目の 1 つの完全なリストに結合し、結果をアルファベット順に並べ替えます。

if item in old and item in new: status = "Unchanged"

項目が両方のリストに表示されるかどうかを確認し、「未変更」としてマークします。

elif item in new: status = "Added"

新しいリストにのみ表示される項目を識別し、「追加」としてマークします。

else: status = "Removed"

古いリストにのみ表示される項目を識別し、「削除」としてマークします。

pd.DataFrame(results, columns=("Item", "Status"))

Python の結果を新しいデータセットに変換し、Excel ワークシートに取り込みます。

次に、Excel の条件付き書式設定ツールを使用して、結果を強調表示しました。 Python が比較ロジックを処理し、Excel の組み込み書式設定ツールにより最終出力のスキャンが容易になりました。 Python では返された DataFrame のスタイルを設定することもできますが、このような単純なステータス レポートの場合は、Excel の条件付き書式設定が変更を明確にする最も簡単な方法でした。

Python のおかげで、同じ月次レポートを毎回書き直す必要がなくなりました

変化する数値をデータに合わせて更新する概​​要に変える

月次レポートの作成は、やらなければならないと常に思っていましたが、決して楽しみにしていなかったスプレッドシートの仕事の 1 つでした。私の選択肢は、変更を手動で計算するか、数値を文書にコピーするか、ますます複雑な数式を構築して数値を文章に変換することでした。 AI を使用して要約を作成することもできますが、それでも計算と結論がデータと一致するかどうかを検証する必要があります。

Python を使用すると、定義したルールと計算に基づいて、ワークブックから繰り返し可能な概要を直接作成できます。私が使用したコードは次のとおりです。

import pandas as pd

df = xl("T_Budget")
df.columns = ("Category", "Last Year", "This Year")

df("Change") = df("This Year") - df("Last Year")

largest_up = df.loc(df("Change").idxmax())
largest_down = df.loc(df("Change").idxmin())

total_last = df("Last Year").sum()
total_this = df("This Year").sum()
pct = (total_this - total_last) / total_last * 100

summary = (
    f"Household spending changed by このテーマについてさらに詳しく知りたい方は以下をご覧ください% compared with last year. "
    f"公式情報はこちら experienced the biggest increase, "
    f"while このテーマについてさらに詳しく知りたい方は以下をご覧ください decreased the most."
)

summary

内訳は次のとおりです。

コード

何をするのか

df = xl("T_Budget")

T_Budget テーブルを pandas DataFrame として Python にインポートします。

df.columns = ("Category", "Last Year", "This Year")

インポートされた列に名前を付けて、コード内で参照しやすくします。

df("Change") = df("This Year") - df("Last Year")

カテゴリごとに差分を計算します。増加は正の数として表示され、減少は負の数として表示されます。

.idxmax() / .idxmin()

増減が最も大きいカテゴリを自動的に検索します。

f"Household spending changed..."

計算結果を使用して、読みやすい概要を作成します。

これは、可能なことの簡単な例にすぎません。これを構築したとき、必要なレポートの種類に応じて、同じロジックを拡張して、個々のカテゴリの変更、支出アラート、またはさまざまな概要形式を含めることができました。


Python は日常のスプレッドシートに活用されています

これらの例から、Excel の Python を複雑なデータ プロジェクト用に予約する必要がないことがわかりました。これは、従来のツールで処理すると、以前は扱いにくく、繰り返しが多く、時間がかかると感じていたスプレッドシートのジョブに対処するための実用的な方法となり得ます。さらに多くの可能性を探りたい場合は、Excel で Python を使用して試すことができる他のプロジェクトとして、一貫性のないスペースと大文字の使用のクリーンアップ、乱雑な日付の標準化、グラフの作成、その他のテキスト分析ワークフローの検討などが挙げられます。

詳しい情報を見る

完全ガイドはこちら

関連記事

前の投稿
Windows や macOS からの脱出ルートは Linux だけではありません。代替手段は 4 つあります
次の投稿
Windows のごみ箱はプライバシーのリスクです。実際にファイルを削除する方法は次のとおりです

関連記事