一般的な問題への対処

Macro Converter を使用して VBA コードを Apps Script に変換する際に発生する可能性のある一般的な問題を以下に示します。

印刷

ファイルを出力する VBA API は自動的に Apps Script に変換されますが、元の VBA API とは動作が異なる場合があります。以下に 2 つの例を示します。

VBA APIApps Script での動作
PrintOutApps Script に変換しますが、Apps Script API はプリンタではなくファイルに出力します。PDF ファイルを手動で印刷できます。
PrintToFileApps Script に変換します。PDF ファイルは [マイドライブ] フォルダに保存されます。

変換されていないアイテム

次の機能は Macro Converter では変換されないため、手動で変換する必要があります。

トリガー

キーボード ショートカットと一部のイベントベースのトリガーの 2 種類のトリガーは、Macro Converter では変換されません。多くの場合、これらのトリガーは手動で作成できます。

キーボード ショートカット

キーボード ショートカットを追加するには、関数をマクロとしてインポートするの手順に沿って操作します。

イベントに基づくトリガー

VBA コードからの一部のイベント(BeforeCloseBeforeSave など)は、Apps Script に対応するイベントはありませんが、回避策を作成できる場合があります。

BeforeClose などのイベントの場合は、カスタム メニューまたはボタンをクリックして、スプレッドシートを閉じる前に必要なアクションを実行できます。

Google スプレッドシートでは編集内容が自動的に保存されるため、BeforeSave などのイベントに関する回避策は現実的ではありません。

ユーザーフォーム

VBA の UserForm は、アプリケーションのユーザー インターフェース(UI)にあるウィンドウやダイアログ ボックスです。マクロ コンバータでは UserForms は変換されません。Apps Script で手動で作成できます。

ユーザー フォーム ダイアログの作成

  1. パソコンの Google スプレッドシートで、変換されたファイルを開きます。
  2. 上部にある [拡張機能] > [** Apps Script**] をクリックします。
  3. エディタの左側の [ファイル] の横にある [ファイルを追加] > [HTML] をクリックします。HTML ファイルには、元の VBA ユーザーフォームと同じ名前を付けることをおすすめします。
  4. フォームに表示するフィールドと情報を追加します。HTML フォームについて詳しくは、W3school.com をご覧ください。
  5. 左側で、変換したコードが含まれている Apps Script ファイル(GS ファイル)をクリックします。
  6. すでにコードに onOpen() トリガーがある場合は、以下のコードで更新します。コードに onOpen() トリガーがない場合は、次のコードを追加します。
    function onOpen() {
     SpreadsheetApp.getUi()
         .createMenu('User Form')
         .addItem('Show Form', 'showForm')
         .addToUi();
    }
    function showForm() {
     var html = HtmlService.createHtmlOutputFromFile('userform_module_name')
         .setWidth(100)
         .setTitle('Sign-up for Email Updates');
     SpreadsheetApp.getUi().showSidebar(html);
    }
        
  7. userform_module_name は、追加した HTML ファイルの名前に置き換えます。
  8. 上部にある [プロジェクトを保存] をクリックします。
  9. Google スプレッドシートに切り替えて、ページを再読み込みしてください。
  10. Google スプレッドシートの上部にある [ユーザー フォーム] > [フォームを表示] をクリックします。

名前付き範囲

Excel では、名前付き範囲は 1 つのセルまたはセル範囲に付ける名前です。

Excel ファイルを Google スプレッドシートに変換する際に、名前付き範囲の種類の一部はサポートされていないため変換されません。以下に 2 つの例を示します。

サポートされていない名前付き範囲説明
TablesGoogle スプレッドシートではサポートされていませんが、回避策があります。

スプレッドシートでこの名前付き範囲を再作成するには、表の範囲の A1 表記を指す名前付き範囲を追加します。変換後のコードで認識できるように、VBA コードの元の名前付き範囲と同じ名前を使用してください。
範囲のリストGoogle スプレッドシートではサポートされていません。この問題の回避策はありません。