導入などについてはこちらも参照
| 処理 | VBA | GAS | openpyxl |
|---|---|---|---|
| ブック作成 | Workbooks.Add | SpreadsheetApp.create("hoge"); | Workbook() |
| シート追加 | Worksheets.Add | SpreadsheetApp.getActiveSpreadsheet().insertSheet("hoge"); | WorkBook.create_sheet(title="hoge") |
| シート名変更 | Worksheets("hoge") | SpreadsheetApp.getActiveSpreadsheet().getSheetByName("hoge").setName("fuga"); | Workbook.active.title = "fuga" |
| セルの値を取得 |
|
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1").getValue() |
|
| セルに値を挿入 |
|
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1").setValue("hoge") |
|
| 入力プロンプト表示 | InputBox("メッセージ") | SpreadsheetApp.getUi().prompt("メッセージ"); | input("メッセージ") |
| ログ出力 | Debug.print "hoge" |
|
print("hoge") |
ちなみに型宣言の有無、コードの冗長性の観点での個人的な使いやすさで言うと以下。
openpyxl > VBA > GAS
スプレッドシート関連の処理以外の処理でいうと、JavaScriptに慣れているのもあってGASはスラスラ書けるんだけども、スプレッドシート関連の処理に関してはいかんせん冗長で仕様の把握がしづらい。
対応表を見ての通り、openpyxlではシート名やセルの指定にキー指定する形をとっているが、GASではgetterの引数という形で指定するので、ある操作に対応するメソッドを把握する必要がある上にメソッド名が長くてコードの1行が長くなってなんかヤダ。
VBAはopenpyxlでは原理的にムリなMsgBoxでのExcelのメッセージボックス表示などが出来たり、セル指定をする際などはアクティブなブックやシートを明示的に指定しなくてもよいなどのグッドポイントがあるが、For~Next、Do While~Loop、If~End Ifなど制御構文の終わりを構文として書くのが面倒くさい。
余談だけども最近はPythonでExcelいじったりAtCoderやったりしてるせいもあってJavaScriptのif文for文の条件部分のカッコ()や処理部分の波カッコ{}にも違和感を覚えるようになってしまった。