私見ですが、
Excelの中だけに閉じてて、簡単な事だけなら、VBAで充分だし、効率もいいと思います。安定度も高いと思います。Pythonだとライブラリが更新されて使えなくなる可能性がありますが、VBAがそんな事になるのは考え難い。
ただ、VBAがいつまでサポートされんのか不安、な問題もずーーっと云われているので、
大量のExcelから情報抜きたいとか、そっからの処理を引き継いて他を動かすとかの場合とかはPythonかと。Excel入ってないPC、LINUXとかで捌く必要がある場合もそうです。
ちなみに、VBAからPythonアプリを起動させたり、PythonからVBAを起動させたりするのも可能で、私はよく使います。
私はPythonでエクセルを自動化しています。一番大きな理由はエクセルを自動化する際にPythonは使い慣れていましたがVBAは使ったことがなかったからです。その次の大きな理由はPythonのデータ処理に特化した便利なライブラリーが使えるからです。
Pythonの活用例としてお手軽だったからではないでしょうか。
CUIベースで何か計算したり表示したりしても面白みがないですし、GUIで何か派手なものをやるのも大変です。Excelで業務を自動化するというテーマならば食い付きが見込めるとの判断ではないでしょうか。
個人的には標準装備ではないPythonをわざわざ入れるくらいなら、標準装備のPowerShells、VBScript、JScriptといったものを使います。
もちろん、Pythonならではのライブラリが使えるというのはメリットかと思いますが、よくあるPythonで自動化を謳う動画やWeb記事はPython固有の便利なライブラリを使っているのでしょうか?(質問に質問で返したいのではなく、素朴な疑問です)
あと考えられるのは、情報ソースが外のWebにあるとか、Excelだけではすまない作業を行うケースです。
その辺りはRPAがよく話題になります。RPAツールは概ね有償だったので無料のPythonでやろうという流れになったのかと思います。
ただし、RPAツールには個人利用や小規模会社の利用は無料のものもありますし、Power Automate Desktopみたいに無償(将来的にWindowsにバンドル予定)のものもあります。
昔からある物の新しい記事を書く意味が無いから。
つまり、ネタの鮮度としてPythonでやる事が記事の目的、手段としてPythonを選んでるのでは無く目的としてPythonを選んでいる。
人工知能(機械学習関連)のライブラリーはPythonの方が圧倒的に多い、エクセルの処理で人工知能を入れたかったらPython。
セキュアで確実に動き簡単に改変されないクローズなものを作りたかったらVBA。
使い分けると良いと思います。
特に理由はなさそう。というのが正直なところですが、メリットを考えるといくつか思いつきます。
(1) エクセルブックの外部にスクリプトが存在することに意味がある
VBAだと「Excelマクロ有効ブック」という形式になり、拡張子が「xlsm」です。
ファイルを配布した場合、この形式だと、Excelを開くときにブロックされてセキュリティ警告が表示されたり、セキュリティ対策ソフトや、ネットワーク側のセキュリティ対策製品でブロックされたりする可能性があります。
Pythonだと、普通のExcelブックを出力できるので、こういった心配はなくなるのかなと思います。
また、VBAのコードを解析されてしまうのが問題になる可能性もあるかもしれません。Pythonであれば、コードは配布せずにすみますので、コードのなかに秘密情報が紛れていても、問題は少ないのかなと思います。
(2) 互換アプリやMac版のExcelでも問題が起こりにくい
互換アプリではVBAは動きませんし、Mac版のExcelでも正常に動作しない可能性はあります。
Pythonが出力した普通のExcelブックであれば問題が起こりにくいのがメリットかもしれません。
だって、アウトプットをエクセルにせざるを得ない環境なんだもの。
ipynbでアウトプットを認めてくれたらpythonistaはエクセルなんて使いませんよ。。。
Excelの外から起動できるとか?(想像)
バッチ処理に使えるか?は気にします。Pythonがベストかどうかはさておき。
//2021-04-18
私はPerl(Win32::OLE)で同じことをやっています…15年以上前から。
単純にラクだからです。
わざわざ普段あまり使わない、しかもUNCパス使うにも一工夫必要なVBAで完結させるよりも、慣れてる言語使うほうがラクでしょ(^_-)-☆
理由は2つあると思います。
- VBAなんて言う、過去の遺物のような言語なんて見たくもないと言う人が使う
- Excel OnlineなどのVBA非対応のアプリユーザーが、無償でやれる自動化の手段の一つとして使う
VBAのような汎用性のない言語を学習するコストが無駄だと考えているからでしょう。
VBAはGitと相性がよくないので。Pythonが使えない環境なら、ほかにインストールしてあるスクリプト言語で書きます。なにもなければ、PowerShellかAppleScript(使ったことないけど)で書くでしょうね。
今はPythonの資産を活用することを軸にをExcelで見せるような使い方がなされています。そのためPythonからExcelを操作する方法がとられます。
ExcelVBAをやられていたのならそれを捨ててPythonに乗り換える必要はないかなと思います。
PythonがExcelを操作するように、Excelそのものの価値は依然として存在しています。ExcelはExcelとして改善や高度化が進んでいます。それらExcelの資産を活用するのに最適な手段はExcelに具備されたものを使うことです。最も迅速に資産を活用できます。
GoogleなどがPythonを機械学習などに活用して来たことで、多くのライブラリが実績伴って公開され利用も高まりました。これらをExcelから活用するためにExcel向けのライブラリを用意するのは現実的ではなさそうです。この点からすると、ExcelVBAではなくPythonを使うべきという考えが生まれるのは理解できます。
私の個人的なアプローチになりますが、ExcelVBAとPythonをクライアントサーバーシステムやWEBシステムのような関係であるとして扱っています。クライアント側のユーザビリティはExcelを軸にVBAで扱い、Python資産を活用してサーバ側はDjangoを使ってWEB化しています。
面倒臭いし、覚えることもありますが、個人的には良い感じです。
回答としては、「どちらがという取捨選択ではなく、Pythonを付け加えるのが素敵」となります。
ExcelやAccess で利用するなら、VBAがよいと思います。
理由は、それらのソフトで長年利用されてきたこともあり、利用しやすいようなしくみが多数あると思うからです。
また現状では Python で Excelにアクセスするためには、Pythonをインストールしなければなりません。自分ひとりで楽しむからそれでもいいのですが、利用する端末に使える環境を整備する必要があるのは、かなりの手間になります。
ゼロからはじめるPython(62) PythonでExcelを自動操縦しよう - ExcelファイルをPDFに変換
また当然ですが、その作ったもののメンテナンスも発生します。未来永劫うごくシステムはないので、ExcelやAccessが新しくなるたびにチェックしたり修正する必要があります。
ただし、Pythonを学んで見るのに Excel や Accesssとの組み合わせをつかうのは手頃です。Pythonを扱うことができれば、仕事の幅は広がるとは思います。
などにもありますが、両方使えるようになるになっていくのがよいと思いますし、どちらの言語をつかうかどうかは、やらないといけないことに対してどの程度の労力をかけないといけないのか、重要度はどれぐらいか、などで検討していけばよいかなと思います。個人的にはいきなりメインシステムに Python をつかうのは不慣れでもあり危ないので、とりあえずサブシステムなどで試しつつ、それが運用上問題ないか実際に運用しながら検討していけばいいのではないかなと思います。
Excel や ACCESS と Python を同列で考えない方が良いです。Python にはデータベース機能が無いので他のデータベースと組み合わせる必要が有ります。ピボットとか使ってグラフ等を出していたりすると Python で再現しようとする一苦労します。売上管理というのが俗に言う「販売管理」ならば規模と内容によってはそこらの SE ではお手上げです。安価なパッケージソフトの導入をお勧めします。本気で金額計算をやろうとすると、各種税計算(軽減税率による複数税率や外税、内税をはじめとする各種課税方式への対応、税の計算単位:請求時一括や伝票・明細単位等)が必要と成りますし、経理との連携を視野に入れると教務ソフトの導入がベストと思います。スタンドアロンなら驚く程安価な物が揃っているのでご検討をお勧めします。
因みに私は現役時代にはシステム開発を生業にしていて販売管理やその他の業務システムを作成して来ました。現在お世話になっている会社では生産管理・在庫管理・見積積算・発注管理・受注管理をリリースし工業簿記会計の完成に併せて販売管理のリリースを行おうとしている経歴の持ち主です。
独学でVBAを書いておられるとのこと。そのVBAで何を実行させようとしているかによって答えは違ってくると考えられます。機械学習の要素が必要なプロジェクトを考えておられるなら、
Pythonをマスターすべきでしょう。売り上げ管理程度のことならわざわざPythonにまで手を染める必要はないかと。
うちの会社には顧客のPCの扱いに関しての質問を受ける部署があるのですが、ExcelはVBAは除外しているんですよ。面倒臭いから。
ただ今度のExcelのPythonは(私の予想を反して)VBAと置き換えるんじゃなくてセル関数で=PYと書いていいということじゃないですか。まあクラウドに繋がっていないとできないし、MS365にしていないと使えないようですが、これはすごく面倒なことになったなと思っています。(まあ私はその部署ではなく、連れ合いがその部署にいるんですけど)Anacondaベースとかふざけるなというくらい好き勝手にデータ分析ができちゃいますね。面倒臭そうです。
365クラウドベースでやるみたいですから、
単にクラウド側でpythonの実行環境提供するだけで、
あとは今の自前pythonでやってるのとたいしてかわらんものになりそうです。
下記のニュースをみると Microsoft Cloud 上での実行(クラウド上での実行)のため、Googleスプレットシートの QUERY関数のように手軽に Pythonが使えるなら利便性は高そうかなと思います。
もちろん、それをローカルの Excelデータとしてダウンロードした場合、その関数は無効化されてつかえないデメリットはあります。ただデータとしてはいきているはずです。
たとえば Googleスプレットシートにしかない関数 QUERYなどを使っている状態で、Excelフォーマットでダウンロードすると、IFERROR 関数が自動付与されていて関数を無効化して結果のデータのみを出してくれてます。そのため便利ですね。
嫌な予感というのは、クラウド上でできるのになぜExcelとしてローカル環境にダウンロードしたら Python の機能がつかえないんだ!と顧客などクレームをうけた場合に、納得してもらうのに苦労する可能性はあるのかもしれません。いつの世も理不尽なことは起こりえるためです。
なると思ったのですが、セルに=PYって書いてPythonプログラムを書くらしいのと、多分データ分析とかグラフ化をするのに使われるのが主だと読んだのでVBAは残ると思います。
というか、VBAはExcelだけのものではなくてWordでもPowerPointでも使える(Accessでも使えるんですけどねー(含み))ので取りあえずなくならないでしょう。
ただ今日(2023/10/10)、VBSは廃止と決まったとニュースがあったのでもしかしたら置き換わるのかもしれません。ただVBSなくなるとWindowsでデスクトップで動くスクリプトがなくなるのでどうするのかなあとは思っています。
VBAの達人はPythonになじまない。
VBAで作られた物が多すぎて他に移行できないのもありそう。
いいえ。
VBAを使う人の需要にはpython in excelは合いません。
事務職がExcelを操るのにVBAでなくPythonを使うべきだ、と言うのでしたら、単純にアウトですね。
VBAだのPythonだのというのはそもそも一部のエリートの概念であり、大部分は使う人、それも訳も分からずに使う人です。VBAがまだ許せるのは、ソースコードがExcelファイル内に閉じ込められており、不可視にすらできることです。これがPythonだとファイルとソースコードが別になり、更に実行環境をローカルにインストールする必要がありますね。
開発者にとってそれは素通りする道ですが、事務職にとってそれはそびえ立つ山なのです。そしてその被害は、Excelファイル内には留まりません。もし出来たとしてもパラメータをちょっと間違えれば動かない、ファイルを置く場所が違えばまた動かない、間違えて別のファイルを上書きしてしまう、消してしまう。そんな小さなトラブルが多発し、その度に開発者は素人のサポートに明け暮れるハメになります。
他にも、ネットの何処かで拾ってきたソースをちょっと改造して使い、会社のオンラインファイルを全て飛ばしてしまったとか、ソースコードウイルスを持ち込んでしまったとか、勝手にライブラリをインストールしてバージョン違いに悩まされるとか、少し考えただけでも頭が痛くなります。
個人が趣味でやるのなら誰も止めません。開発者間での利用もやはり有効でしょう。しかし、レベルが様々な(且つその平均レベルが低い)事務職を想定した場合、VBAで纏める方が圧倒的に「無難」です。
そりゃあダントツでExcel+VBAですよ。
まずVBAすら使えない人が多い事を念頭におきますと、「Excelでなんか頑張ってる仕事」を「Excelのまま自動化」する所がファーストステップになりますから。
具体的には「ここに日付いれてボタン押したら、別シートから該当日付の集計値を取ってきますよ」くらいの。
そこでPythonで作った物を起動してパラメータを指定してーみたいなのを説明ようとしても、まず使い方を覚えてもらうところでコケますから。
【追記】
VBAなら「Excelにくっついてるマクロのボタンだよ。自動記録があって、しかも後で少し書き換えたら色んな事ができるよ。」って言えば、とっつきやすい人が多いです。ここでいきなり「Excel附属のVBでコーディングしてうんたらかんたら」するとITアレルギーがでます。Pythonという名前を出そうものなら概要を話してる途中でアナフィラキシーショックが出ます。
「これはExcelだよー怖くないよー」ってのが、入門用として大きいんですね。
既に回答が出ていますが、私も同じ考えです。質問氏と事務職では背景が異なり、その背景の違いが考慮されていないと思います。
- 質問氏…Pythonに慣れてて、何でもPyhonで処理したい。
- 事務職…事務作業の必要上Excelを覚えたけど、VBAは覚えなくて済むなら覚えないで済ませたい。
事務職の方たちはVBAを覚えるくらいなら、会計基準の改正やコンプライアンスの改正への追従など、業務内容に特化した知識を追っていきたい人たちだと思います。逆に質問氏がそういう分野に関心を持つことは、悪いことではありませんが、Pythonの熟練度の向上が疎かになります。
どこで線引するのかは状況次第なところもありますが、他の回答から読み取れる線引きが妥当なところだと思います。
質問氏のような方がロジック部分のメンテナンスを専任でやるのであれば、質問氏のスキル構成に合わせるのが正解ですし、より多くの人が持っているスキル構成に合わせて構築すれば、その担当がいなくなった時のリスクも低減できます。
以上全てを視野に入れて提案すれば、その提案は通る可能性が高まると思います。
エクセル内部だけで完結するような業務だけで使うことが多そうだ。というのであればVBAで充分でしょう。(時代遅れかどうか、いつまでVBAが使われるか、は分かりませんが、一般事務職にとってVBAが最強の改善ツールである、という会社は大企業にも中小企業にも存在します。)
エクセル内部で完結しないケースが多そうだ、というならPythonに軍配が上がります。
質問者さんがやりたいことを明確にし、状況によって取捨選択するとよいと思います。(選択基準は後述)
車で例えてみるとVBAはトラクター。
Pythonは普通車です。
VBA は畑という閉じられた、限られたスペースの中(エクセル内部)では目的に特化しているので使い勝手が良いです。一般道に出て(データベース、インターネットなど) 畑仕事以外のなにかをするというのには向いていません。(VBAでもデータベース接続やスクレイピングはできますがPythonの方が適しています)
Python は普通車ですから大体なんでもこなせます。ライブラリも豊富にそろっているのでデータベース接続とか機械学習とかAIプログラミングとかスクレイピングとか問題なくできます。
もちろんエクセルも操作できます。ただ、「エクセルを自動化する」に限っていえばVBAの方がやりやすいです。
- VBA はエクセルがインストールされていればすぐに使えます。Python は環境構築しないと使えません。
(大きな会社では自身のPCに Python 実行環境を構築することが許可されないことが多く、こういう会社ではVBAが最強の改善ツールです) - Python のエクセルライブラリでポピュラーなOpenPyXLは操作対象のExcelが開かれているとエラーになります。
- xlwingsというライブラリを使えば、エクセルを開いたままでもエラーにならなかったと記憶しています。しかし、エクセル内部だけで完結する業務の場合はVBAの方が小回りがきいて使いやすいです。
- Python で構築したエクセル自動化プログラムを他人に使ってもらうのはハードルが高いです。VBAはシート内にボタンを設置してクリックすればすぐに処理を始められます。
Python の場合は別の仕掛けが必要です。
(Python と VBA を併用し、ボタンからPython を実行させる、というのも可能ですが両方の知識、環境が必要です) - 他の人に質問者さんが作ったPython プログラムを実行できる環境構築、管理も大変です。(VBAはエクセルのバージョン違いによるエラーがたまにありますが、それくらいです。環境構築はめちゃ楽です)
- VBAの場合、エクセルを開いたままコードを実行でき、エラー箇所でコードが止まり、確認しつつエクセルを編集しつつ実行できますのでデバッグが容易です。
Python でやる場合はデバッグのハードルが上がります。プログラミング未経験者にとってこのハードルは高いです。
上記のような特性がありますので、何をしたいか? を明確にして選定するとよいと思います。
ただし、VBAは一般事務職の方が使うケースも多くネット上で得られる情報は本当に玉石混淆です。アンチパターンを参考にしてしまい、ちゃんとコードを書かないケースでは属人化します。つまり業務改善システム開発者である質問者さんが居なくなると、メンテナンスできない状態になりシステムは腐敗臭を放ちます。しかし、現場はそのシステムでまわっており、昔の手順・記憶が失われて久しく腐ったシステムを使わざるを得ない、なんて状況が発生しかねません。
これはまあ、VBAに限った話ではなく、Pythonでも起こりえますが。
言語の特性以外のところでいうと、個人的には Python の方が書いていて楽しいです。
IDE やGitHub Copilot の支援も受けられますし、コードの記述量も少なくすみ、やりたいことを実現しやすいです。
ちなみに私はVBAもPythonも両方使って自動化したり、Djangoを使ってWebアプリケーションを開発したりしています。
UdemyでVBAのクラスモジュールによる開発、に関するコースとか、VBAからOpenAIのAPI を用いてエクセルの特性を活かしたChatGPTのような応答を行う関数を実装するコースも出しています。(Pythonのコースも近々にリリースする予定です)
僕はまさに仕事をVBA → Pythonへと切り替えた側です。
⚪︎VBAの良さ
- Excelが触れれば触れる(環境構築不要)
- プログラミング未経験でも触りやすい。上記+マクロ記録。
- 既に自動化すべき作業が用意されていることが多い。集計等。
⚪︎Pythonの良さ
- VBAよりできる事が多く、需要が高い。
- Pythonは現在、「全言語の中でトップクラスの勢い」を誇っています。AIや機械学習と相性が良く、かつ汎用性が高いからですね。VBAは「Excelの自動化」や「軽めのデータ管理」以外に使われることはそれほど多くありません(出来るけど、わざわざVBAでやる必要ないよねってことが多い)。
- VBAより単価が高くなる。
- 上記の「需要の高さ」が単価にも影響します。
- 「同じ作業」をしてもPythonの方が良いです。
- イメージして下さい。自分は今、コンビニでレジ打ちして時給1000円。でもスーパーでレジ打ちをしたら時給1200円になるとしたら?コンビニでレジ打ち続けようと思いますか?
- 開発され続けていて、今も進化中。
- VBAはしばらく止まっていて、今後改善される見通しは薄いと思います。Pythonは毎年何らかの凄いライブラリが出てきている(or 更新されている)し、本体も高速化対応中(3.11)です。
今はExcelに目がいっているかもしれませんが、もう少し広い範囲で自動化を考えるようになると結局はPythonの方が色々出来
… (もっと読む)えーと、他の回答で触れていない観点で。
VBAで開発すると、基本的に一人で全部抱えることになりますんで、それを許容できるか検討したほうがいいですね。
VBAのコードはExcelのシートなので、大勢でファイル共有したりすると簡単に壊れます。また、GitやSVNのようなバージョン管理や差分管理にも馴染みません。
なので、他のスクリプト言語とは違う苦労があると想定されます。
そうそう、お気に入りのテキストエディタも使えないので、VBAのエディタの挙動にイライラさせられるかもしれません。
まずは、Windowsコマンドを覚えてください。
VBAの中でWindowsコマンドを使うケースがままあります。
たとえば、フォルダの作成などは、VBAよりもコマンドを使ったほうが簡単です。
仮に、C:¥temp¥testというフォルダを新規に作りたい場合、Cドライブ直下に temp というフォルダがなければVBAではエラーになりますが、コマンドだとエラーにはならず、 temp フォルダも作成してくれます。
コマンドの次は、SQLを勉強することをおすすめします。
ADODBオブジェクトを使えば、Excelの表やシートをテーブルに見立てて、データベースのように操作することができますし、SQLを使うための特別なインストール作業も不要です。
また、SQLを覚えればAccessを使いこなすこともできるようになります。
SQLの次は、HTML、CSS、Javascript に挑戦しましょう。
何でもかんでもExcelで作るのではなく、細かなドキュメントやツールは html や hta で作ってしまうのが軽くて良いです。
ここまでできれば、ちょっとしたRPAを実現させることもできると思います。
0 コメント:
コメントを投稿