一般的な問題への対処

マクロ コンバーターを使用して 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 などのイベントの回避策は実現できません。

Userforms

VBA では、UserForm はアプリケーションのユーザー インターフェース(UI)のウィンドウまたはダイアログ ボックスです。Macro Converter では UserForm は変換されません。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 スプレッドシートではサポートされていません。回避策はありません。