「PythonとVBAどっちがいい?」
これからプログラミング言語を勉強しようとしている人の中には、上記の質問を抱く人もいるはずです。
結論から言えば、「基本はPythonがオススメですが、条件次第ではVBAもあり」と私は考えています。
当然、PythonとVBAに両方に良い部分があり、足りない部分があります。
そこで、PythonとVBAの違いからそれぞれのメリットまで紹介していきます。
・Pythonのほうが仕事の幅が広がる
・ただし、VBAを学ぶ方がイイ場合がある
目次
PythonとVBAは似てるけど、何が違う?
PythonとVBAは似ていると聞くことがありますが、異なる点が数多く存在します。
ここでは以下について紹介していきます。
違い2. PythonとVBAのプログラム
違い3. PythonとVBAの学習
違い4. PythonとVBAの転職
違い5. PythonとVBAの副業
1. PythonとVBAのできることの違い
PythonとVBAでできることの違いを以下の表に列挙します。
項目 | Python | VBA |
---|---|---|
Microsoft Officeとの連携 | 〇 (Openpyxlやwin32comで操作可能) |
◎ (ExcelからOutlookまで操作可能) |
Googleアプリとの連携 | 〇 (GoogleスプレッドシートやGmailなどを操作可能) |
× (VBAでは対応不可) |
外部アプリとの連携(slackなど) | ◎ (Pythonは外部アプリとの連携ライブラリが豊富) |
△ (VBAで実行できないわけではない) |
アプリ作成 | ◎ (PythonはDjango等で作成可能) |
△ (VBAでアプリ作成は聞かない) |
データ分析 | ◎ (Pandasでデータ処理可能) |
〇 (VBAやピボットテーブルで対応可能) |
機械学習 | ◎ (sklearnなどのライブラリが豊富) |
△ (VBAでやるのではあまり聞かない) |
VBAで出来ることのほとんどは、Pythonでも実行可能です。
そのため仕事の幅広さで言えば、Pythonのほうが圧倒的に有利と言えます。
Pythonで出来ることは以下で紹介しています。
VBAで出来ることも以下で紹介しています。
出来ることを知りたい人はご覧ください。
2. PythonとVBAのプログラムの違い
PythonとVBAでプログラムソースは違いについて紹介します。
Pythonのプログラム記載ルール
・インデント無視できない
・変数宣言不要
・使えるライブラリが多い(Excelから機械学習sclearnやウェブスクレイピングBeautifulSoupまで幅広く使用可能)
PythonでExcelデータの算出プログラムを書くと以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#ステップ1|ライブラリの設定 from openpyxl import load_workbook import datetime #ステップ2|所定フォルダ内の「Book1.xlsm」を指定して読み込む filepath = 'Book1.xlsx' wb = load_workbook(filename=filepath) ws1 = wb['データ'] ws2 = wb['集計'] #ステップ3|集計範囲の取得 startdate=datetime.datetime(int(ws2['B2'].value) , int(ws2['C2'].value) , int(ws2['D2'].value)) enddate=datetime.datetime(int(ws2['B3'].value) , int(ws2['C3'].value) , int(ws2['D3'].value)) #ステップ4|エクセルの最終行や最終列の取得 lastrow1=ws1.max_row lastrow2=ws2.max_row lastcol2=ws2.max_column #ステップ5|「データ」シートを読み込み、データを取得 values1=[[cell.value for cell in row1] for row1 in ws1] #ステップ6|条件に合う情報をFor文とIF文で場合分けして取得 for i in range(7, lastrow2+1): for j in range(2, lastcol2+1): counter = 0 for k in range(1, lastrow1): if values1[k][1] == ws2.cell(row=i, column=1).value: if values1[k][2] == ws2.cell(row=6, column=j).value: torihikidate = values1[k][3] if startdate <= torihikidate <= enddate: kingaku=values1[k][4] counter = counter + int(kingaku) #ステップ7|ステップ6に合わない場合に0を入れる if counter is None: counter=0 ws2.cell(row=i, column=j).value = counter #ステップ8|「Book2.xlsm」として所定のフォルダに保存する newfilepath = 'Book2.xlsx' wb.save(newfilepath) |
上記プログラムの詳細な解説は以下の記事をご覧ください。
VBAの記載ルール
・インデント無視可能
・変数宣言(してもしなくてもよい)
・使えるライブラリがPythonほど多くない
VBAでExcelデータの算出プログラムを書くと以下のようになります。(一つ上のPythonプログラムと同じ作業をVBAで書いています)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Option Explicit Sub keisan() '---変数を宣言--- Dim cmax0, cmax1, cnt, i, j, k As Long Dim ws0, ws1, ws2 As Worksheet Dim torihiki, tanto As String Dim goukei As Double Dim d1, d2, d3 As Date '---ワークシートを設定--- Set ws0 = Worksheets("Data") Set ws1 = Worksheets("Result") Application.Calculation = xlManual '---集計開始日と集計終了日を指定--- d1 = ws1.Range("B2").Value & "/" & ws1.Range("C2").Value & "/" & ws1.Range("D2").Value d2 = ws1.Range("B3").Value & "/" & ws1.Range("C3").Value & "/" & ws1.Range("D3").Value '---格納--- cmax0 = ws0.Range("A65536").End(xlUp).Row cmax1 = ws1.Range("A65536").End(xlUp).Row cnt = ws1.Range("XFD10").End(xlToLeft).Column For k = 11 To cmax1 torihiki = ws1.Range("A" & k).Value '---照合したい条件でデータベースを検索--- For j = 0 To cnt - 3 goukei = 0 tanto = ws1.Range("B10").Offset(0, j + 1).Value For i = 2 To cmax0 d3 = ws0.Range("D" & i).Value If d3 >= d1 And d3 <= d2 Then If ws0.Range("B" & i).Value = torihiki Then If ws0.Range("C" & i).Value = tanto Then goukei = goukei + ws0.Range("H" & i).Value End If End If End If Next '---Resultシートの表に出力--- ws1.Range("B" &; k).Offset(0, j + 1).Value = goukei Next Next Application.Calculation = xlAutomatic End Sub |
補足:PythonとVBAの処理速度の比較
下記の類似プログラムで処理速度を比較してみました。
Python:約118秒
VBA:約13秒
VBAのほうが約9倍の処理が早いという結果でした。
これは私のPCのスペックや実行環境があるので、全てのユーザーで同様の結果が得られるかどうかは不明です。
計測したプログラムは以下に記載しておきます。
Pythonの処理速度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#ステップ1|ライブラリの設定 import datetime now1 = datetime.datetime.now() print(now1) Count = 0 for i in range(1,1000): for j in range(1, 1000): for k in range(1, 1000): Count = Count + 1 now2 = datetime.datetime.now() print(now2) |
約118秒
VBAの処理速度
以下のプログラムの処理速度を計測してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Calculation() Dim i As Long, j As Long, k As Long Dim Count As Long Debug.Print Now Count = 0 For i = 1 To 1000 For j = 1 To 1000 For k = 1 To 1000 Count = Count + 1 Next Next Next Debug.Print Now End Sub |
約13秒
3. PythonとVBAの学習のしやすさの違い
ウェブ情報や書籍から有料講座まで学習コンテンツの量を比較してみました。
結論を言うと、Pythonのほうが学習情報が多く、何か困ったときに役立つ情報を見つけやすいと言えます。
書籍
項目 | Python | VBA |
---|---|---|
Amazon書籍 | 40000以上 | 3000以上 |
Udemy | 10000件 | 2530件 |
Google検索 | 約 406,000,000 件 | 約 48,100,000 件 |
そもそもPythonのほうがVBAより出来ることが幅広いため、その分情報量は多くなります。
他にもざっくりと調査しただけで定かではありませんが、プログラミングスクールの数もPythonのほうが多いと思います。(正確な数値はありません)
したがって上記の表のとおり、Pythonのほうが情報が多いと言えます。
しかし上記の表の数値が大きいから、「Pythonのほうが勉強する教材がそろっている」とは必ずしも言えません。
そもそもPythonのほうが出来ることの幅が広いため、その分雑多情報が多くなっていることを否定できないからです。
とはいえ、学習方法の選択肢が多いのは事実。
困ったときに助けになる学習情報が多いのは、勉強を進めるときに役立つのは間違いありません。
4. PythonとVBAの転職における違い
PythonとVBAで転職市場における応募数を見てみます。
転職サイト | Python | VBA |
---|---|---|
Doda(パーソル) | 1701 | 319 |
リクナビnext | 1005 | 199 |
上記は転職サイトの一部ですが、約5倍の求人量の差分があります。
これはPythonで出来ることのほうが幅広いからであり、当然の結果と言えます。
将来性を考えるとPythonほうが有利であることは否めません。
5. PythonとVBAの副業における違い
転職サイト | Python | VBA |
---|---|---|
lancers | 3005 | 2568 |
crowdworks | 727 | 611 |
上記は、副業サイトの代表例を比較していますが、Pythonのほうが1.2倍多いデータです。
量的にはPythonのほうが多い結果になっています。
しかし単価について気になる人も多いと思います。
単価などについてはべつ記事で検討予定ですので、そちらで報告します。(現在、調整中)
結局、VBAとPythonはどっちを使うべき? → 将来性を考えてPython
・Pythonがオススメ
もしプログラミング初心者が、「VBAとPythonのどちらを勉強すべきか?」と悩んでいるのであれば、Pythonをオススメします。
その理由は、PythonはVBAで出来ることはカバーしていて、さらに多くのことができるからです。
多くのことができるから、将来の選択肢が増えるのです。
たとえばPythonを使えば、Excelを含めたMicrosoft Officeの作業自動化を実装することは可能です。
要はVBAで出来ることはPythonで出来ると考えてほぼ問題ありません。
そのため、もしプログラミング初心者が、「VBAとPythonのどちらを勉強すべきか?」と悩んでいるのであれば、Pythonをオススメします。
Pythonのほうが将来性が高い
Pythonのほうが出来ることが幅広いということは、市場に求められる機会も増えることを意味します。
実際、転職市場の数でもPythonの求人のほうが多いというデータがありました。
単純にPythonができることのほうがVBAより価値が高く、量が多いからです。
たとえばPythonは機械学習やウェブアプリを作成することも可能です。
機械学習やウェブアプリはVBAでは実装は難しいです。(機械学習やウェブアプリの実装ができないとは思いませんが、私の知る限りVBAでの実装は聞いたことがありません。)
Pythonはデータサイエンスやアプリ製作までカバーしているので、本当に実用的。
それでもVBAを学んだ方がいいこともある
ただし、VBAを選択する方がいい場合もゼロではありません。
とくに以下の条件においては、VBAを勉強する方が良い可能性が高い可能性があります。
条件1. 仕事でエクセルマクロを使うことが多い
仕事でマクロを使う機会が多い人は、VBAを勉強することをオススメします。
理由はマクロをメンテナンスできるようになれば、会社でお金をもらいながらプログラミング勉強ができるからです。
たとえば、Pythonをゼロから学ぶとなると、多くの人は独学からスタートすることになるはずです。
しかし仕事や家庭が忙しいと、勉強時間を十分に確保できません。
これが会社でVBAを勉強できるならどうでしょうか。
お金をもらいながらプログラミングを勉強できるのです。
そんなオイシイ状況に越したことはありません。
そのため、仕事でマクロを使う機会が多い人は、会社でVBA勉強ができる環境を作ることができる可能性があります。
したがってまずは会社でお金をもらいながらプログラミング(VBAではあるが)を勉強する機会を作ることをオススメします。
もう一つの理由として、仕事でマクロを使う場合、マクロをメンテナンスできる人が身近にいるはずです。
たとえば、まずマクロを修正したり機能を追加したりしてVBAを作ります。
そして、そのプログラムを、VBAができる人に質問してフィードバックをもらえば、より深くプログラミングを学ぶことができます。
VBAをそこそこ書けるようになれば、Pythonを含めた他のプログラミング言語を勉強がラクになります。
そのため会社でマクロを使うことが多い人は、学ぶ環境が整っているという意味でVBAを学ぶことをオススメします。
条件2. 会社でPythonをインストールすることができない
もし会社でPythonをインストールできないのであれば、VBAを勉強することをオススメします。
会社によっては、情報セキュリティの観点からPythonをインストールできない場合があるかもしれません。
その場合は、VBAをオススメします。
当然、会社がMicroSoft Officeを使っていて、Excelを使える環境にあることが前提です。
会社でExcelを使うことができれば、特に許可なくVBAを使用することができるはずです。
その場合は、会社の業務時間で、VBAを作ることができるので、条件1の会社で勉強することができるということがあります。
そうすれば、お金をもらいながら勉強できるのでVBAを学ぶ方が良いです。
条件3. Python学習で挫折したことがある
私はPythonよりVBAのほうがプログラミング言語として学ぶ上で難易度は低いと考えています。
そのため、Python学習で挫折したことがあるなら、VBAを学ぶのはアリです。
なぜPythonよりVBAのほうが難易度が低いと考えているかというと、VBAはプログラムのイメージがしやすいからです。
とくにリストや配列という考え方は、VBAプログラムの作成では後回しにしてもなんとかなることがあります。
しかしPythonではリストやタプルといった考え方に躓くと、それ以上先に進めなくなることがあります。
VBAは仕事で求められるレベルが低いことがあるので、Pythonに挫折してしまったなら、VBAからチャレンジするのは良い選択と言えます。
PythonとVBAの難易度はどれくらいか?
PythonとVBAの難易度について、それぞれ勉強体験記で紹介しています。
Pythonの勉強体験記
VBAの勉強体験記
Pythonを会社のPCで使うには? 2つのカベ
Pythonを会社PCで使うには、いくつかのカベがあります。
1. Pythonをインストールできることを担当者に問い合わせる
VBAはMicrosoft Officeに搭載されているので、特に問い合わせなくも使用可能
そのためExcelが使える職場環境であれば、VBAは許可なく使用することが可能です。
当然、マクロにセキュリティをかけて使用できないようにする企業もあります。
そのため、どの企業でもVBAは許可が不要とは言いません。
しかし、Microsoft Officeが使える環境であれば、VBAを使うことはそこまで大きなハードルにはならないでしょう。
しかし、Pythonを使うにはPythonを使用する環境構築のためにPythonをインストールする必要があります。
2. 大手の会社ではPythonを使う人は多くない
会社や部署によりますが、Pythonを使える人は少ないのが印象です。
それこそ、データ解析の部署にでも所属していない限り、Pythonを使える人そのものがいません。
それが何を意味しているかというと、レベルアップできる環境が社内にないことです
そのため、自ら勉強してPythonの知識を入れていく必要があります。
またPythonでデータ解析できるようになっても、それを人に伝えることも難しいです。
そもそもPythonの使い方から手ほどきしていく必要があるからです
そのような状況が待ち受けていることは、勉強を始める前に知っておいて欲しいと思います。
PythonとVBAに関連する記事
以下の記事で、Python×Excelで出来る事をまとめました。
PythonでVBAを操作する方法はこちらで紹介しています。