VBAの代わりにPythonを使うと、どんなところが便利か一例をあげてみた

PythonとVBAとどちらが楽にコードが書けるか、ChatGPTにコードを書かせて実例を示してみました。

· 1 min read
VBAの代わりにPythonを使うと、どんなところが便利か一例をあげてみた
Photo by Rubaitul Azad / Unsplash

VBAでピボットテーブルのように2つのテーブルをIDフィールドで結合するにはどうすればいいか?PowerQueryを記述するM言語を使用するかテーブルをデータベースと見立てて操作するSQL言語を記述する必要があります。他にもテーブルをループしてIDを一致するところを検索する方法もありますが、いずれにしても面倒です。ということでChatGPTにSQLを使用した場合のサンプルコードを書かせてみました。


Sub JoinTables()

    ' 接続文字列を設定する
    Dim conn As New ADODB.Connection
    Dim connectionString As String
    connectionString = "Provider=SQLOLEDB;Data Source=MY-SERVER-NAME;Initial Catalog=MY-DATABASE-NAME;User ID=MY-USER-ID;Password=MY-PASSWORD;"
    conn.Open connectionString
    
    ' SQLクエリを実行する
    Dim rs As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "SELECT * FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID"
    rs.Open strSQL, conn
    
    ' データを処理する
    Do While Not rs.EOF
        ' ここに処理を追加する
        rs.MoveNext
    Loop
    
    ' リソースを解放する
    rs.Close
    conn.Close
    
    Set rs = Nothing
    Set conn = Nothing

End Sub

strSQLの文が分かっていれば、そこまで難しいコードではありませんが、データベースとしてEexcelのファイルを開かなければいけないところが少し面倒ですね。

さて、これがPythonのPandasというライブラリを使うとこうなります。

import pandas as pd

# Excelファイルを読み込む
df1 = pd.read_excel('file1.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('file2.xlsx', sheet_name='Sheet1')

# テーブルを結合する
result = pd.merge(df1, df2, on='ID')

# 結果をExcelファイルに書き出す
with pd.ExcelWriter('merged_file.xlsx') as writer:
    result.to_excel(writer, sheet_name='Sheet1', index=False)

データの読み込みと書き出しを含めてこんなに簡単に出来てしまうんです。

これはほんの一例ですが、Excel VBAには様々な外部ライブラリもあります。その出来がPythonのライブラリと比べてどんな出来か、今後、調査してみるつもりです。