お悩み女子Pythonなら何でも自動化できると聞いたけど、できないこともあるはず。始める前に知っておきたい……
「Pythonではできない」と言われる内容には、本当にできないものと、向かないもの、条件を満たせばできるものが混ざっています。区別せずに読むと、必要以上に諦めたり、逆に途中で行き詰まったりします。
業務の自動化で出会いやすいPythonの限界5つと、代わりの手段を、動かして確かめた結果と公式ドキュメントの記載をもとに整理します。載せているコードはWindows 11 と Python 3.12 で動くことを確かめています。動かしていないものはそう書いています。
- 「できない」「向かない」「条件付き」の見分け方
- Excelの数式の計算結果を、openpyxlで読めない理由
- Googleスプレッドシートの中で、Pythonを直接動かせない理由
- スレッドで速くならない場合と、プロセスに分ける方法
- Pythonのない環境へ渡す方法と、スマホアプリの注意点
Pythonでできないこと5つ|できない・向かない・条件付きの見分け方
業務の自動化でよく出会う場面を、3つの区分に分けて一覧にしました(2026年10月時点)。
「できない」は標準の使い方では実現できないもの、「向かない」は動くが別の方法のほうが速いもの、「条件付き」は追加の道具や手間があればできるものです。
| 場面 | 区分 | Pythonだけでは | 代わりの手段 |
|---|---|---|---|
| Excelの数式の計算結果をファイルから読む | できない(openpyxl) | 数式は計算されず、Excelが保存した値しか読めない | Python側で計算する/Excelで保存したファイルを読む |
| Googleスプレッドシートの中から直接動かす | できない | Apps Scriptは JavaScript で書く | GASを使う/PythonからSheets APIで外から操作する |
| 計算を複数コアで同時に進める | 向かない(スレッド) | 標準の実装(CPython)は、スレッドでPythonの計算を同時に進められない | プロセスを分ける/free-threadedビルド |
| Pythonのない環境でそのまま動かす | 条件付き | 実行にPythonが必要 | 実行ファイル化する/Pythonごと渡す |
| スマホアプリにする | 条件付き | 単体のアプリにはならず、埋め込みが前提 | Webやスプレッドシートで代替する/専用ツールを使う |
以降はこの5つを1つずつ、確かめた結果と公式ドキュメントの記載をもとに見ていきます。
Excelの数式を計算する|openpyxlでできないことと代わりの手段
Excelのファイルを Python で操作するときによく使うライブラリが openpyxl です。数式の入ったセルを扱うときに、つまずきやすい限界があります。
数式を書いても値は入らない
A3に =SUM(A1:A2) という数式を書いて保存し、読み直してみます。
from openpyxl import Workbook, load_workbook
wb = Workbook()
ws = wb.active
ws["A1"] = 100
ws["A2"] = 200
ws["A3"] = "=SUM(A1:A2)"
wb.save("formula.xlsx")
print(load_workbook("formula.xlsx").active["A3"].value)
print(load_workbook("formula.xlsx", data_only=True).active["A3"].value)
実行すると、次のように表示されます。
=SUM(A1:A2)
None
1行目は、数式がそのまま文字として読めたものです。2行目は data_only=True を付けて、計算結果を読もうとしたものですが、None(値なし)が返ります。
公式ドキュメントには、data_only はExcelが最後にシートを読み込んだときに保存された値を返す指定だと書かれています。openpyxl が作っただけのファイルには、その値がありません。
openpyxl は数式を書き込めますが、計算はしません。合計や平均が必要なら、Python側で計算して値として書き込むか、Excelで一度開いて保存したファイルを読みます。
Excelの中でPythonを使う手段
Excelの画面の中で Python を動かす手段もあります。ここでは動かしておらず、各公式ページの記載をもとにした紹介です。
1つ目は、Microsoft が提供する Python in Excel です。セルに Python の数式を書く機能で、Microsoft の説明ページでは Excel for Microsoft 365 が対象とされています。同じページに、セキュリティのため pandas.read_csv のような外部データの読み込み関数は使えない、との記載もあります。ファイルを読み込んで処理する自動化とは、使い方が別のものです。
2つ目はxlwings という外部のライブラリです。公式ドキュメントではVBAに近い書き方で Excel を Python から操作できると説明されています。
Python in Excel は、利用できる条件や機能が更新されることがあります。使う前に、Microsoft の公式ページで自分の環境が対象かを確認してください。
Googleスプレッドシートで使う|Apps ScriptとPython
スプレッドシートに組み込んで動かす自動化では、Pythonを直接書けない場面があります。ここでは、その理由と、Pythonで関われる範囲を整理します。
スプレッドシートの中ではJavaScript
Google スプレッドシートに組み込む自動化の仕組みが、Google Apps Script(GAS)です。Google の公式ドキュメントではJavaScript を使って書く開発プラットフォームと説明されています。Apps Script のコードそのものを Python で書く選択肢はありません。別に用意したサーバーの Python を通信で呼び出す構成も作れますが、小さな業務の自動化には準備が大きくなります。
Pythonから外側で操作する方法
Python からスプレッドシートを操作する道は別にあります。Google が Google Sheets API を用意していて、公式に Python 用のクイックスタートがあります。必要なものとして、Python 3.10.7 以上、pip、Google Cloud のプロジェクト、Google アカウントが挙げられています。
つまり、準備の手間は GAS より増えます。目安として、シートの中で完結する作業はGAS、手元のファイルや大量のデータも絡む作業はPython、と分けると選びやすくなります。
選び方の詳しい比較は次の記事で扱っています。
複数コアでの同時計算|スレッドとプロセス
大量のデータ処理を速くしたいとき、スレッドで分けても計算が速くならない場合があります。理由はPythonの標準的な実装(CPython)にある仕組みです。
スレッドとプロセスの所要時間
計算だけを続ける同じ処理を2回、順番に・スレッド2つで・プロセス2つで動かして、時間を比べます。
import time
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
def work(n):
total = 0
for i in range(n):
total += i * i
return total
def measure(label, executor_class):
start = time.perf_counter()
with executor_class(max_workers=2) as ex:
list(ex.map(work, [20_000_000, 20_000_000]))
print(f"{label}: {time.perf_counter() - start:.1f}秒")
if __name__ == "__main__":
start = time.perf_counter()
work(20_000_000)
work(20_000_000)
print(f"順番に2回: {time.perf_counter() - start:.1f}秒")
measure("スレッド2つ", ThreadPoolExecutor)
measure("プロセス2つ", ProcessPoolExecutor)
このPCで動かすと、次のように表示されます。値は動かすたびに変わります。
順番に2回: 2.2秒
スレッド2つ: 2.2秒
プロセス2つ: 1.4秒
スレッド2つは、順番に2回動かした場合とほぼ同じ時間です。プロセス2つに分けると短くなります。ただし、短くなる幅は処理の内容や環境で変わります。
お悩み女子じゃあ、プロセスに分ければ何でも速くなるの?
なべくん速くならない場合もあります。最初に、待ち時間の原因が計算なのか、通信やファイルの読み書きなのかを測ります。
GILとfree-threadedビルド
原因はGIL(グローバルインタプリタロック)です。公式の用語集では、CPython が「一度にPythonのバイトコードを実行するスレッドを1つだけ」にする仕組みと説明されています。複数のコアを使うには、複数のプロセスに分けるのが一般的だとも書かれています。
Python 3.13 以降には、GIL を無効にした free-threaded ビルドがあります。公式ドキュメントによると、Windows と macOS の公式インストーラーで任意で入れられます。ただし、拡張モジュールを持つ一部のサードパーティのライブラリは対応しておらず、GIL を再び有効にすることがあるとされています。ここでは動かしていません。
Pythonのない環境へ渡す|実行ファイル化でできることと限界
Pythonで作ったツールは、動かす側のPCにも Python が必要です。同僚のPCに入っていない場合は、渡し方を考える必要があります。
実行ファイルにまとめる
Python公式のパッケージングガイドでは、Python本体を一緒に埋め込んで1つの実行ファイルにする方法をフリーズと呼び、PyInstaller などのツールを挙げています。ガイドには、手間がかかることも多い、とも書かれています。
PyInstaller 6.22.3 で、1行だけ表示する hello.py を1つの実行ファイルにする手順は、次のとおりです。
python -m pip install pyinstaller
python -m PyInstaller --onefile hello.py
このPCでできた dist\hello.exe は約7MBで、PATH から Python が見つからない状態でも動きます。ただし、確かめたのは1行のスクリプトだけです。openpyxl など外部のライブラリを使うスクリプトや、別のPCでの動作は確かめていません。
渡す前に確認すること
実行ファイルにすると、Pythonを入れてもらう手間は減りますが、ファイルが大きくなり、更新のたびに作り直す必要があります。社内の数人に渡す程度なら、Python と仮想環境の作り直し方を共有するほうが軽く済む場合もあります。
スマホアプリを作る|iOSとAndroidでは埋め込みが前提
Pythonでスマホ向けのアプリを作ることもできますが、パソコンとは前提が違います。Python公式ドキュメントに、AndroidとiOSそれぞれの説明があります。
公式ドキュメントによると、Androidには、Pythonをシステム全体にインストールするという考え方がなく、配布できるのは「アプリ」だけです。そのため、Pythonを使う方法は、ネイティブのアプリにPythonインタープリタを埋め込む形になります。iOSの説明も同じ構成です。
開発を助けるツールとして、AndroidのページにはBriefcase、Buildozer、Chaquopy などが挙げられています。ここでは動かしていません。
業務の自動化が目的なら、スマホから使いたい場面でも、まずはスプレッドシートやWebの画面で足りないかを考えます。スマホアプリにする手間は、パソコン向けのスクリプトより大きくなります。
Pythonでできないことに関するよくある質問
処理の速さ、GASとの使い分け、古い情報の見分け方について答えます。
- Pythonは遅いと聞きますが、業務の自動化でも問題になりますか?
-
処理の内容によります。計算だけを続ける処理では、この記事の実験のように時間がかかる場合があります。一方で、通信やファイルの読み書きの待ち時間が長い処理では、Pythonの速さが原因とは限りません。まず時間を測って、どこで待っているかを確かめます。
- PythonとGASは、結局どちらを選べばよいですか?
-
スプレッドシートの中で完結する作業ならGAS、手元のExcelやCSVも絡む作業ならPythonが選びやすくなります。判断基準は別の記事で詳しく比べています。
- ネットで見た「Pythonではできない」が古い情報かどうかは、どう見分けますか?
-
Pythonのバージョンで変わる点があります。Python 3.13 の新機能のページには、GILを無効にする実験的な機能と、iOS・Android が公式サポートのプラットフォーム(tier 3)になったことが載っています。記事の日付と、対象のバージョンを確かめます。
まとめ|Pythonの限界は「できない・向かない・条件付き」で見分ける
Pythonでできないことを整理します。
Excelの数式:openpyxlは数式を計算しない。計算結果はPython側で出すか、Excelが保存した値を読む。
スプレッドシート:Apps ScriptはJavaScript。PythonはSheets APIで外から操作する。
同時計算:スレッドでは速くならない場合がある。プロセスに分けるか、free-threadedビルドを検討する。
渡し方:実行にPythonが必要。実行ファイル化は手間とのバランスで選ぶ。
スマホ:AndroidもiOSも、アプリにPythonを埋め込む形が前提。
「できない」と言われたら、どの区分の話かを確かめるところから始めてみてください。
Pythonの得意な範囲を知るために、次の記事も参考になります。
参考資料
openpyxl.reader.excel | openpyxl ドキュメント
Apps Script の概要 | Google for Developers
Python クイックスタート | Google Sheets API
用語集 (global interpreter lock) | Python 3 ドキュメント
Python support for free threading | Python 3 ドキュメント
Overview of Python Packaging | Python Packaging User Guide
Python 3.13 の新機能 | Python 3 ドキュメント
Android で Python を使う | Python 3 ドキュメント
Excel で Python を使い始める | Microsoft サポート
