これからプログラミング言語を勉強しようとしている人の中には、「PythonとVBAどっちがいい?」と疑問を抱く人もいるはずです。
結論から言えば、「基本は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はどっちを使うべき? → VBA,Pythonの順で
もしプログラミング初心者が、「VBAとPythonのどちらを勉強すべきか?」と悩んでいるのであれば、まずはVBAをオススメします。
なぜなら「VBAのほうが仕事で使いやすいから」です。
仕事で使えるため、「お金をもらいながら」「楽しく」「実務経験を積める」のです。
VBAは多くの会社で認知されているため、上記のように仕事としてお金をもらいながらプログラミングスキルを高めていけます。
これはPythonではなかなか難しいです。
このように考える理由は以下で詳しく解説していますのでぜひご覧ください。
VBAのデメリット
ただし、VBAから学ぶことのデメリットもあります。
たとえばPythonはVBAで出来ることはカバーしていて、さらに多くのことができるからです。
Pythonのほうが出来ることが幅広いということは、市場に求められる機会も増えることを意味します。
実際、転職市場の数でもPythonの求人のほうが多いというデータがありました。
単純にPythonができることのほうがVBAより価値が高く、量が多いからです。
機械学習やウェブアプリはVBAでは実装は難しいです。(機械学習やウェブアプリの実装ができないとは思いませんが、私の知る限りVBAでの実装は聞いたことがありません。)
そのデメリットも理解した上で、VBA、Pythonの順で学んでいくことをオススメします。
VBA、Pythonで学ぶことをおすすめする理由
ステップ2. Pythonを学んで出来ることを広げていく
まず仕事の一つとしてVBAを使い業務を効率化していきます。
そしてVBAを学ぶ過程でプログラミングに慣れていきます。
その後、Pythonを学んでいく流れです。
なぜならVBAを学べば、Pythonを学ぶのはそこまで難しくないからです。
プログラミング言語はVBAとPythonで異なるが、根本は同じです。
そのため、VBAでプログラムを書いた経験があれば、Pythonを学ぶときのハードルも小さくなります。
リスクを最小限にしてプログラミングスキルを習得
Pythonは業務効率化(Excel仕事など)、機械学習やウェブアプリまで幅広く活用することができます。
そのためプログラミング初心者がPythonから学び始めたいとなってしまうものです。
しかしそれは賢明な選択とは言えません。
なぜならリスク(習得できない可能性)が大きいからです。
もし習得できない場合、何十万ものお金と費やした時間が徒労に終わってしまいます。これは非常にもったいない。
それよりもVBAから学ぶことをオススメします。
以下で、VBA,Pythonと学んでいくべき理由と学び方を詳しく解説していますのでぜひご覧ください。
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を操作する方法はこちらで紹介しています。