■ はじめに
「会社でGoogleスプレッドシートを使うことになったけれど、Excelのマクロが動かない」
そんなお困りごと、意外と多いんです。
Googleスプレッドシートでは、Excelのマクロ(VBA)はそのままでは動きません。代わりに、Google Apps Script(GAS)という仕組みで書き直す必要があります。
この記事では、実際にVBAのマクロをGASに移植してみて「ここはつまずきやすい」と感じたポイントを5つご紹介します。
■ 1. 1セルずつの読み書きは、まとめて行う
VBAでは「Cells(i, 1).Value」のように、1セルずつ読み書きする書き方がよく使われます。でも、GASで同じ書き方をすると、処理がとても遅くなってしまいます。
GASでは、getValues()で範囲をまとめて読み込み、配列のまま計算してから、setValues()でまとめて書き込むのが基本です。これだけで、処理時間が大きく変わります。
■ 2. 実行時間は1回6分まで
GASには「1回の実行は6分まで」という上限があります。データが多いと、途中で止まってしまうことも。
1つ目のまとめて読み書きする方法に加えて、データが多い場合は、処理を区切って続きから再開させる工夫が必要になることもあります。
■ 3. 配列は0から、シートは1から数える
シートの行や列は1から数えますが、getValues()で読み込んだ配列は0から数えます。たとえばF列は、配列では「row[5]」になります。
ここがずれると、違う列の値を使ってしまうので要注意です。
■ 4. Dictionaryは「Map」に置き換える
VBAで集計によく使う「Scripting.Dictionary」は、GASにはありません。代わりに、JavaScriptの「Map」やオブジェクトを使います。
件数と合計金額のように、1つのキーに複数の値を持たせたいときも、オブジェクトを使えばすっきり書けます。
■ 5. そのまま再現できない機能もある
ユーザーフォーム、パソコン内のファイル操作、Outlookとの連携などは、Googleスプレッドシートではそのまま動きません。
その場合は、Googleドライブ、Gmail、サイドバー画面など、Googleのサービスに置き換える方法を考えます。見た目や操作感が少し変わることもあるので、事前に確認しておくと安心です。
■ まとめ
移植でいちばん大切なのは、「元のマクロと同じ結果になっているか」を確かめることです。移植の前に「処理前のデータ」と「マクロを実行した後の結果」を残しておき、移植後の結果と突き合わせるのがおすすめです。
「自分で書き直すのは大変そう」「どこまで移せるか知りたい」という方は、お気軽にご相談ください。マクロの中身を拝見してから、移植できる範囲とお見積りをお伝えしています。
▼ExcelマクロのGAS移植はこちら
https://coconala.com/services/4475399▼動かなくなったGASの修正はこちら
https://coconala.com/services/4489742