VBA は Excel(Office)用に開発された専用の言語ですから、Excel を操作するならそっちのほうが使いやすいに決まっています。
Python の大きなデメリットは、Python で Excel が使えるうようになるまでの環境構築がとても面倒くさいということです。しかも職場のすべてのパソコンにそれをする必要があります。
が、その反論も近いうちになくなるかもしれませんね。
ついにというかやはりというか、Python の生みの親である Guido van Rossum が Microsoft に招聘されました。
「Python」生みの親グイド・ヴァンロッサム氏、マイクロソフトに入社
Office に Python が搭載されるという噂は以前からありましたが、いよいよそれが現実味を帯びてきたわけです。少なくとも Microsoft が Python で何かをやろうとしていることは間違いありません。
Office に Python が搭載されるということはすなわち、世の中のほとんどの WindowsPC に Python が搭載されるということです。
ファイルの拡張子ひとつ取得するのに
CreateObject("Scripting.FileSystemObject").GetExtensionName("C:\Work\Book1.xlsx")
などといった長いコードを書く必要もなくなるかもしれないのです。
Python が VBA に代わる Office のマクロ言語になれば、事務職に限らず今後すべてのビジネスマンは Python の知識が必須となるでしょう。
楽しみですね。
事務職が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よりPythonの方が優れていると私も思いますが、VBAが必要とされる場面は多々あります。
Excelがインストールされているからと言って、必ずしもPythonもインストールされているとは限りません。
組織によっては、PCに新たなソフトをインストールすることが著しくハードルが高い、もしくは集中管理ポリシーによってインストールそのものが不可能とされている場合があります。
また、長年使われてきたVBA資産の継承の問題があります。
その組織がVBAありきで回っているのであれば、それをPythonに置き換えるのは学習コスト等を含めてなかなか厳しいと思います。
全てPythonに置き換えたとしても、「今までと同じことをするために」Pythonプログラミングのコストと学習コストをかけるのでは無意味な投資と見なされるはずです。
もう1点あります。Excel VBAでできることが「完全に一つ残らず」Pythonでできるのでしょうか?
この点は私が不勉強なだけかもしれませんが、100%の互換性がないとなると、実害があろうがなかろうがその一点だけをもってPython導入を反対する人は一定数いると思います。
逆に導入しやすい環境としては、その組織のメンバーのITスキルが平均的に高くPythonに適応しやすいこと、今までのVBA資産のしがらみがない状況であること、教育なども含めたPython導入後のサポートにコストをかけられること、などが揃った組織なのではないかと思います。
それよりも一番いいのは「Pythonでなくてはどうしても困ること」「Pythonを導入すると著しく生産性が上がること」を見つけることだと思います。
VBAはExcelの中で動きます。 Excelが入っていればVBAは使えるので、環境などを考える必要がありませんから、Excelユーザにファイルを渡せばそのまま利用できます。 そして、VBAはExcelの中で動きソフト自体を扱えて、一つのExcelファイルをExcelで開いたままVBAでそのファイルを操作出来ます。
PythonはExcelを扱うのでは無く、Pythonと言うプログラムでExcelファイルを扱えます。 Excelが入っていても、Pythonを別途導入しなければ使えず、Excelファイルの他にPythonファイルも渡さなければなりません。 別プログラムでExcel自体では無くExcelファイルを扱えるだけなので、ユーザがExcelでExcelファイルを操作して、そのファイルにVBAやPythonがするような処理が必要なとき、ユーザはわざわざExcelファルを保存して閉じた上でPythonで処理してまた開き直してやらなければならず操作性が悪いです。
また、PythonはVBAほどExcelの機能を上手く扱えません。 PythonのライブラリはExcelの基本的な機能や、ライブラリ開発者の使いたい機能だけが実装されていて、VBAで出来る事の方がより細かいです。
どちらでも。
…
事務職に必要とされるのは「演算結果」です。
プログラミング言語が好きな人には思い至らないコトかもしれませんが。
私見ですが、
VBAのメリットとしては、Excelに閉じれる事。ファイルが別になったりしません。またライブラリがどんどん更新されてる訳ではないので、いっかい作ったらMSがミスらない限り安定して使える。
デメリットは、Excelに閉じてしまってるが故に、そもそもExcelでやる?それ?って事もぜんぶVBAでやりたいが故にExcelを使っちゃうって事がある。
Pythonで書けば、その豊富なライブラリで、いろんな加工が簡単に出来るのは確か。
ただ、ファイルが別になる。また、ライブラリが更新されて使えなくなったりなメンテナンスが必ず発生します。
VBAはOfficeソフトにはセットで入ってるから、追加インストール不要なのが最大のメリットでは?
Pythonだと、本体プラスOpenPyXLとかも入れなきゃいけないので、それをシステム管理部門にうんと言わせなきゃいけないわけですが、特にユーザー権限としてあまりあれこれ認めたくない(セキュリティの懸念)のが管理サイドの本音だから、そこをどう突破するか。
うんと言わせたところで全社標準じゃないわけで、どこでも使えるわけじゃない…と考えたら、いくら良いことは解ってても、無条件に受け入れられますかね?
応募要項にpythonとgitを必須スキルとして人を集め、事務に関わるソースコードを社内git で、みんなで開発出来ればpythonが生きてきます。
しかしながら、日本の既存の職場で上記のような環境を実現する事は、ほぼ不可能です。どのみち個人しか使わないコードならVBAでもpythonでも、どっちでも良いかと思います。
a2a
難しい問いですね。私が社内のメンバーに同じ問いをされたら、苦い顔すること間違いなしです。
—
私の知る限りの標準的なWindowsユーザーは、ショートカットキーを覚えることさえ、苦手意識をもっていると思います。
出来るだけ簡単な仕掛けで済ませなければ、このようなユーザーは関心を示さないだろうな、、と。
これが、VBAのメリットです。
—
VBAを積極的に学んだ人にとっては、より豊富な表現を持つPythonを拒否する理由がないと思います。
API万歳、ライブラリ万歳!です。
これがPythonのメリットです。
それはExcelのマクロとしてPythonが組めてからの話になりますね。
個人的にはVBAには消えて欲しいと思っているので、早くそんな時代が来て欲しいものです。
余談ですが、仕事において作成した物を「部署の資産」として公開せずに秘匿する人が必ず一定数いるのですが、そんな輩にはPythonすらも使ってほしくないなぁとは思います。
Excelのマクロが必要でない事務作業では、VBAもPythonも不要です。
Excelのマクロが必要で事務職がそのマクロでコーディングしないといけないのであれば、VBAでもPythonでもその事務職が精通しているものを使えばよいです。
つまりは仕事として求められるスキルが VBAなのか Pythonなのかで変わってきますから、可能なら両方使えるとメリットは大きいと思います。たとえば VBAからPythonへの移行作業などもできますからね!
事務作業を自動化する「Excel×Python」の威力 | リーダーシップ・教養・資格・スキル
などをみるようにこれからマクロを学ぶなら、Pythonにメリットがあると思います。2022年度から高校で新設される科目「情報」ではPythonを扱っていくようですしね。ただ、クラウド化が進んで、Googleスプレットシートとそのマクロである Google Apps Scriptなど、クラウドメインなシステムになってしまっているかもしれませんね。
Pythonで容易に環境構築できる(もしくはプリインストールされている)のはMacではないですか?それに変更するとなると大変ですね。あとPythonのコードを共有・管理する際の手間もありますね。
ただVBAでなくPythonで良いとなったときに、ならばEXCELである必要はありますかね。Google App Scriptなら環境構築不要でブラウザのみでWin/Mac両方でつかえます。Googleスプレッドシートで良い気もしたり。
Excelを操作する手段としてであれば、現状はVBAが有効で、Pythonはあまりメリットは無いと思います。
理由は、運用とメンテナンス性の観点です。まず当面は、扱える人が多いVBAの方が有利であること。そして、ExcelにバンドルされるVBAの場合、接続保証に気を使わなくてよい事があります。
もし、ご質問が、『統計処理や大きなデータを扱う仕事が増えているから』もしくは、『PythonがExcelに実装されることが決まったら』という話であれば「おっしゃることは、そうかもしれないですね」と言う回答になるでしょう。
Excelを扱う以前の前提知識が多いからじゃないでしょうか?
MSが使用するのはIronPythonです。
この場合VBAのコマンドをそのまま使えると思います。
個人的にはマクロ自体使わないけど。(^-^)
私はPythonしか使っていませんが、VBA でできるならVBAに任せた方が良いと思います。Pythonよりも簡単に習えるでしょうし。Pythonがその力を発揮するのはPandasを使って大量のデータに対してある程度複雑な処理をする場合だと思います。VBAは手続き型のコードだと思いますが、Pandasを使えば記述的なコードが書けるので、簡潔でわかりやすいコードが書けます。
エクセルに対して操作するなら、vbaがpythonに勝ってることなど一つもないとは思います。
あるとしたら、vbaで組まれてるから新しいのもvbaで作るしかないという技術的負債くらいですかね。
というか、python使うならエクセルいらなくなるんですけどね笑
excelで管理してるのって、結局dbとプログラムとコマンドを一括でgui管理できるからであって、自動化するなら、それぞれ分けたほうが保守性上がるのは、プログラマーの全員が理解していますよね。
既出かもしれませんが、10進表記がめんどくさそうてすね。Decimalライブラリはありますが、なんかいろいろ落とし穴にはまりそうです。
vba なら変数だけ10進としておけば後は大丈夫なのではなかろうかと。
csvを操作してなにかするならExcelでやるよりもPythonやRというのはわかりますが、VBAをPythonで代替するメリットがあまり浮かばないです。
ただ、VBAを学ぶのは時代遅れだとは思います。
VBAは遠くないうちにPower Platformにその地位を奪われると思います。
VBAとPythonはどちらも事務作業に使用されることがありますが、それぞれにメリット・デメリットがあります。
VBAの主なメリットは、Microsoft Office製品との統合性が高いことです。VBAを使用すると、Excel、Access、Wordなどのアプリケーションに簡単にアクセスして、自動化することができます。また、VBAは簡単なスクリプトを書くために使われるため、Excelのマクロなどの簡単なタスクを自動化するのに最適です。
一方、Pythonは、データの分析や処理、Webスクレイピング、機械学習など、広範な用途で使用される汎用性の高いプログラミング言語です。PythonはVBAよりも複雑な処理を実行することができ、多くのライブラリが利用可能であり、Excel以外のデータベースやAPIなどにアクセスすることができます。
結論として、簡単なタスクを自動化するためには、VBAが便利です。しかし、より複雑な処理を行う場合や、Excel以外のデータソースにアクセスする必要がある場合は、Pythonを使用することをお勧めします。また、PythonはVBAに比べて学習コストが高くなることがありますが、Pythonの知識は現代のビジネスにおいて非常に価値があり、今後ますます需要が高まると考えられます。
PythonがVBAのように内蔵されなかったのが全てです。アンケート取ったのにね。Pythonのモジュールで十分的な非搭載の言い訳を聞いたときはそういう事じゃねぇと呆れ返りましたよ。
Pythonを使う最大のメリットは、officeインストールなしにofficeで作成されている/閲覧予定のファイルを扱うことだと思っています。
これは事務職ではメリットになるんでしょうか。普通officeくらい入ってますよね。
ExcelだけならVBAですが、seleniumやpyautogui等を使ってブラウザやGUI操作など、RPA的な事もさせるところまで視野に入れるなら、pythonだと思います。
ただ、環境構築が少し大変なのでまずはシステム部門によるスモールスタートですかね。
これは、「この仕事はシステム化すべきですか?」という質問に近いご質問ですね。
システム屋さんは「絶対Pythonでやるべきです!」と答えるでしょうし、Excelマスターは「Excelで十分できます」と答えるでしょう。かなり回答にも主観が入りやすいことにご注意ください。
純粋な使い勝手の良さを考えるなら、「あなた自身が慣れているもの」が使い勝手が一番いい、ということになります。どちらも学ぶのに努力や時間が必要です。慣れれば便利に使えますよ。
私はRuby推しですね。QuoraはPythonの会社だし、Pythonは好きな方の言語ではあるのですが、Rubyと比べてしまうと、セクシーさが足りなくてショボーンってなりますよねぇ。
RubyとPythonって、軽量言語としてのポジション的には兄弟とか表裏一体といっても良いぐらい似ているのですが、言語の思想としてはほぼ真逆なのが面白いですよね。
RubyはPerlの文脈を背負っているので、TMTOWTDIといって「同じことをやるのにも複数のやり方がある」という自由主義的なのに対し、PythonのほうはZen of Pythonに宣言されているように、反TMTOWTDI主義とでもいうべき “There should be one—and preferably only one—obvious way to do it.” (同じことをやる唯一の書き方があるべきだ)という教条主義的な思想があります。
プログラミングとはどういうものか、聖典のように教科書的な定義の正書法が欲しければ、書き方に自由度のないPythonのほうがいいでしょう。実際、プログラミング初学者向けの教育の現場ではPythonがよく使われますね。そして、そのままずっとPythonを使い続ける人も多いでしょう。
ところが、現実世界の日本語、英語などの自然言語はどうでしょう?
「同じことを伝えるのにも、複数の表現方法がある」ほうが普
… (もっと読む)本に関しては他の方が書かれているので別の観点で。
Excelを操作するライブラリというとopenpyxlとかxlwings辺りがよく出てくると思いますが、各ライブラリが「どんな機能があるかよくわからん。それらしいサイトが見つからん」という時にどうやって調べると良いか。
Pythonで知っておくと便利な組込関数の1つに「dir」があります。
例えばosで見てみます(上記2つはinstall面倒だったので失礼)。
どんな属性を持っているかの一覧が出てきます。
<class 'int'>は数値なんだな、os.CLD_CONTINUEDは6を持っているんだな、とかはわかると思います。
ただ、これだけだと<class 'function'>が何なのかよくわかりません。関数なんだろうなということわかると思いますが、その処理内容がイマイチ…。
そういう時のお勧めはgetsource。ソース内部をそのまま読んでしまえば良いです。
また、得体の知れないものを見かけたらとりあえずtype。中身はわからないなりに、何者か(文字列なのか数値なのか関数なのか等)は教えてくれます。
この辺りは僕が「最初に教えてくれよ〜」って思った部分なので、何かの参考になるかも知れません。
ある程度巨大なライブラリになると、「よく説明されているのは機能の一部」ということは珍しくなく、「どれだけ検索をしてもなかなか見つからないもの」も、まぁまぁあります。そういう時にdir + getsource(他)で調べていくと、「ほとんどの人が知らない便利機能」みたいなのを見つけられてちょっと優越感に浸れます。
0 コメント:
コメントを投稿