見出し画像

GAS#2.5 シートからプログラムを実行

こんにちは静岡在住の某SEです。
#2 ではループを使って、単純作業を自動化する方法を学習しました。
今回は休憩と復習の回となります。

まずは、現状のシートのおさらいです。
※#1, #2 の内容を若干修正しているため、お手元のシートと状況が異なっている場合があるかもしれません。
ここで合わせておきましょう。

シートに左下にある「+」ボタンをクリックしてシート2を増やしました。

プログラム側は「myFunction1」が「シート1」に書き込む処理、
「myFunction2」が「シート2」に書き込む処理、となっています。

/**
 * シート1のA1セルに「テスト」と記入する
 */
function myFunction1() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  sheet.getRange(1,1).setValue('テスト');
}

/**
 * シート2に6回「テスト」と記入する
 * 1行目から始めて、3で割った余りが1水色、2なら黄色、0ならピンクで背景を塗る
 */
function myFunction2() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート2');
  let col = 1;
  let text = 'テスト';
  // 1行目から6行目まで文字を書く
  // 偶数行は背景をピンク、奇数行は背景を水色にする
  for( let i = 1; i < 7; i++)  {

    if( i % 3 == 0 ){
      // 3で割った余りが0
      sheet.getRange( i, col ).setBackground('#f4cccc'); // ピンク
    } else if( i % 3 == 1 ) {
      // 3で割った余りが1
      sheet.getRange( i, col ).setBackground('#cfe2f3'); // 水色
    } else {
      // 3で割った余りが2
      sheet.getRange( i, col ).setBackground('#fff2cc'); // 黄色
    }

    sheet.getRange( i, col ).setValue( text );
  }
}

#2 の最後で色を3色に塗り分ける課題の答えもここでお披露目です。
※ else if という記述で条件分岐を行っています。

if( 条件1 ){
    その場合の処理
} else if( 条件1が成立しなかった場合の 条件2 ) {
    その場合の処理
} else {
    条件1も条件2も成立しなかった場合の処理
}

さて、ここからが今回のメインテーマです。
前回作成したプログラムを、スプレッドシートから実行してみましょう。
以下の onOpen() 関数を追加することで、シート内にメニューを追加することができます。

/**
 * シートにメニューを追加
 */
function onOpen(){
  SpreadsheetApp.getActiveSpreadsheet().addMenu('スクリプト',[
    {name: 'サンプル1', functionName: 'myFunction1'},
    {name: 'サンプル2', functionName: 'myFunction2'},
  ]);
}

/**
 * シート1のA1セルに「テスト」と記入する
 */
function myFunction1() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  sheet.getRange(1,1).setValue('テスト');
}

/**
 * シート2に6回「テスト」と記入する
 * 1行目から始めて、3で割った余りが1水色、2なら黄色、0ならピンクで背景を塗る
 */
function myFunction2() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート2');
  let col = 1;
  let text = 'テスト';
  // 1行目から6行目まで文字を書く
  // 偶数行は背景をピンク、奇数行は背景を水色にする
  for( let i = 1; i < 7; i++)  {

    if( i % 3 == 0 ){
      // 3で割った余りが0
      sheet.getRange( i, col ).setBackground('#f4cccc'); // ピンク
    } else if( i % 3 == 1 ) {
      // 3で割った余りが1
      sheet.getRange( i, col ).setBackground('#cfe2f3'); // 水色
    } else {
      // 3で割った余りが2
      sheet.getRange( i, col ).setBackground('#fff2cc'); // 黄色
    }

    sheet.getRange( i, col ).setValue( text );
  }
}

ここまで書けたら Ctr + S でしっかりとコードを保存して、シートに戻りましょう。

まだシートには変化が無いと思いますが、F5キーでページを更新すると、画像のように「スクリプト」というメニューが表示されます。

試しに「シート2」の文字を消した後に、「サンプル2」をクリックしてみてください。
MyFunction2 のプログラムが実行され、再び「テスト」という文字が書かれたでしょうか?

このように、スクリプト入力画面に移動しなくても自作のプログラムが実行できるようになりました。
ぜひ、実際の業務で活用できる姿を想像してみてください。

次回からコードの詳しい書き方に戻っていきたいと思います。
この記事が気に入っていただけた方は、記事への💛と noteのフォローをしてお待ちください。

追記:#3 を公開しました!

この記事が気に入ったらサポートをしてみませんか?