VBAからGASへ置き換える際の整理事項

SES

ExcelでVBAを使った業務ツールを運用していると、
Googleスプレッドシート(以下、スプレッドシート)への移行や併用を検討する場面があります。

VBAとGASはいずれも処理を自動化するための仕組みですが、
実際に置き換えを進めてみると、単純なコード変換では対応できない違いがいくつもあることに気づきます。

本記事では、VBAからGASへ置き換える過程で、
事前に整理しておいた方が理解しやすかった点をまとめています。
特定の実装方法や移行方針を示すものではなく、
検討時の整理資料として共有する内容です。

VBAとGASは似ているが前提が異なる

VBAとGASはいずれもスクリプトで処理を記述しますが、
動作環境の前提が大きく異なります。

VBA

  • Excelアプリケーション上で動作する
  • ユーザーが操作している画面と処理が密接に結びつく
  • アプリケーションの状態(表示・入力・対話)を前提に処理を書きやすい

GAS

  • クラウド上で実行される
  • スプレッドシートは処理対象となるデータの一部
  • 実行時にユーザーがどの画面を見ているかとは独立して処理が動く

この前提の違いを意識せずに置き換えを進めると、
「同じことをしているつもりなのに動きが違う」
と感じる原因になります。

オンライン前提か、オフラインでも動作するか

VBAとGASの違いとして、
動作時にネットワーク接続を前提とするかどうか も整理しておく必要があります。

GASはクラウド上で実行されるため、
ネットワーク接続がない状態では処理を実行できません。
スクリプトの実行やデータの取得・更新は、
オンライン環境が前提となります。

一方で、VBAはExcelアプリケーション上で動作するため、

  • ローカルに保存されたファイル
  • ローカル環境で完結する処理

であれば、
ネットワーク環境が整っていなくても動作するケースがあります。

この違いは、

  • 利用場所
  • 通信制限のある環境
  • 一時的なネットワーク断

といった状況で、
使い勝手や運用面の差として表れることがあります。

まずはVBAが「何をしているか」を分解する

VBAをGASに置き換える前に、
元のVBAが どのような役割の処理をしているのか を整理する必要があります。

例えば、

  • データを取得している
  • 条件によって処理を分けている
  • 別のシートやファイルに書き込んでいる
  • ユーザーに確認や結果を返している

といった処理を、
Excel操作の流れではなく、処理の目的単位で分解すると、
GASでどう構成するかを考えやすくなります。

VBAにおける「画面操作」とGASのUIは同じではない

VBAでは、Excelアプリ上で動作することを前提としているため、
次のような 画面(UI)と一体になった処理 が書かれることがあります。

  • ユーザーフォーム(UserForm)を表示して入力を受け取る
  • メッセージボックスや入力ボックスで対話する
  • シート表示の切り替えやスクロールなど、見えている画面の状態を変更する
  • 処理中の画面更新を制御する

これらは、
ユーザーが操作しているExcel画面そのものを前提にした実装です。

一方でGASはクラウド上で実行されるため、
Excelのようにアプリ画面を直接操作することはできません。

ただし、GASでも HtmlService を使うことで、

  • サイドバー
  • ダイアログ
  • HTMLベースの入力画面

といった UI(画面)を作成することは可能です。

この場合、

  • 画面(HTML + JavaScript)
  • 処理(GAS側の関数)

を分けて設計し、
ユーザー操作をきっかけに処理を実行する構成になります。

そのため、VBAからGASへ置き換える際は、

「画面を使う/使わない」ではなく、
「Excel画面に依存した処理か、UIと処理を分離した構成か」

という違いとして整理する方が、実態に近いと感じました。

データ操作の考え方は大きく変わる

VBAでは、
セルを1つずつ読み書きしても問題にならないケースが多くあります。

一方、GASでは、

  • スプレッドシートとの通信回数
  • 実行時間の制限

といった制約があるため、
データを配列としてまとめて取得し、まとめて処理する
書き方が基本になります。

この点は、
VBA経験が長いほど最初に戸惑いやすい部分です。

実行タイミングの違いを整理する

VBAでは、

  • ボタンを押す
  • ファイルを開く

といった操作を起点に処理が実行されることが一般的です。

GASでは、

  • スプレッドシートのメニューから実行
  • トリガーによる定期・自動実行
  • UI(サイドバーやダイアログ)からの実行

など、
実行の入口が複数存在します。

VBAと同じ感覚で移行すると、
「いつ処理が動くのか分かりにくい」
と感じる原因になるため、
実行タイミングの整理が重要になります。

すべてをGASに置き換える必要はない場合もある

VBAで作られた処理の中には、

  • 手動でも十分対応できるもの
  • GASにしても運用が楽にならないもの

が含まれていることもあります。

そのため、

VBAをそのまますべてGASに移す

のではなく、

GASに置き換える意味がある処理を切り分ける

という考え方も、
検討時の整理として有効だと感じました。

おわりに

VBAからGASへの置き換えは、
単なるコード変換ではなく、
前提や構成を整理し直す作業に近い印象でした。

特に、
オンライン前提かどうか、
画面操作の考え方、
実行環境の違いといった点は、
事前に整理しておかないと見落としやすい部分です。

同様の検討を行う際の整理資料として、
参考になれば幸いです。

コメント

タイトルとURLをコピーしました