一般的な問題への対処

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

印刷

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

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

未変換の商品アイテム

次の機能はマクロコンバータでは変換されないため、手動で変換する必要があります。

トリガー

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

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

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

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

VBA コードのイベントには、BeforeCloseBeforeSave など、Apps Script に同等のイベントがないこともありますが、回避策を作成できる場合があります。

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

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

ユーザーフォーム

VBA の UserForm は、アプリケーションのユーザー インターフェース(UI)のウィンドウまたはダイアログ ボックスです。Macro Converter は UserForms を変換しません。これらは Apps Script で手動で作成できます。

ユーザー フォーム ダイアログを作成する

  1. パソコンで、変換したファイルを Google スプレッドシートで開きます。
  2. 上部の [拡張機能] > [Apps Script] をクリックします。
  3. エディタの左側の [ファイル] の横にある [ファイルを追加] > [HTML] をクリックします。HTML ファイルには、元の VBA UserForm と同じ名前を付けることをおすすめします。
  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 スプレッドシートの上部で、[User Form](ユーザーフォーム) > [Show Form](フォームを表示)をクリックします。

名前付き範囲

Excel では、名前付き範囲は単一のセルまたはセル範囲に付けられる名前です。

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

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

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