スプレッドシートのマクロとカスタム関数|Google Apps Script入門(2)

Google
この記事は約7分で読めます。

はじめに

 Google Apps Script入門第二弾として、スプレッドシートのマクロとカスタム関数について紹介します。

 このGoogle Apps Script入門の第二弾からは、「GoogleのApps Scriptを学ぶ」の「AppsScriptFundamentals」に沿ってが学習していきます。

 この記事を読むと、次のことについて知ることができます。

  • スプレッドシートでマクロの作成
    • 練習用Googleスプレッドシートの読み込み
    • マクロの作成
  • スクリプトエディターでマクロを見る
    • マクロの適用
    • マクロ内容を変更して適用
  • カスタム関数
    • ファイルの追加から円の面積のカスタム関数の作成
    • 円の面積のカスタム関数の動作の確認
    • 円の面積に円周率に正確なGASの関数を利用
    • ドキュメンテーションコメント
    • カスタム機能のガイドライン

 GoogleのApps Scriptの基礎をを学んでいく前に、Gasとは?などについては知った上で学習するほうが良いでしょう。

 Gasとは?などについては次の記事を参照して下さい。

 それでは早速、スプレッドシートのマクロとカスタム関数などについて深堀していきます。

スプレッドシートでマクロの作成

練習用Googleスプレッドシートの読み込み

  これからのことを学習していく上で必要なGoogleが提供しいるスプレッドシートを読み込みましょう。

 Google Sheetsのドキュメントのコピー画面が出ますので、「コピーを作成」をクリックします。

 「コピー ~ Top 10 Highest Grossing Films (2018)」と言うGoogle Sheetsが立ち上がりますので、あなたの名前などを入れて、題目を変えておきましょう。

マクロの作成

 読み込んだGoogle Sheetsの上部メニューの「拡張機能」⇒「マクロ」⇒「マクロの記録」をクリックすると、下の方に「新しいマクロを記録していま…」というウインドウが表示されますので、そのデフォルトになっている「絶対参照を使用」⇒「相対参照を使用」に変更します。

 以後のあなたのGoogle Sheetsへの操作がマクロで自動記録されます。

 次の操作をします。

  1. 行1をクリックして選択
  2. 背景の色を白から青に変更
  3. テキストの色を黒から白に変更
  4. テキストを太字(Bold)にします。
  5. テキストのサイスを12ptにします。
  6. 1行を固定行に設定

  操作し終えたら、「新しいマクロを記録していま…」というウインドウ内の「保存」をクリックすると、「新しいマクロの保存」ウインドウが表示されますので、マクロ名に「headstyle」と記入して、「保存」をクリックします。

スクリプトエディターでマクロを見る

 作成したマクロをスクリプトエディターを起動して見てみましょう。

 上部メニューの「拡張機能」⇒「Apps Script」と順にクリックします。

 マクロのスクリプトを見ると次のようになっていました。

/** @OnlyCurrentDoc */
function headstyle() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
sheet.getRange(spreadsheet.getCurrentCell().getRow() - 13, 1, 1, sheet.getMaxColumns()).activate();
spreadsheet.getActiveRangeList().setBackground('#0000ff')
.setFontColor('#ffffff')
.setFontWeight('bold')
.setFontSize(12);
spreadsheet.getActiveSheet().setFrozenRows(1);
};

 上述のスクリプトで最初の行の内容は、「/** @OnlyCurrentDoc */」はコメント行となっており、「以下のスクリプトはこのスプレッドシートのみ適用されます」という意味になります。

 スクリプトの内容については、詳細は省略しますが、上から5行目の「.getRow() - 13, 1, 1」⇒「.getRow() , 1, 1」に変更して、保存(フロッピーマーク)をクリックして下さい。

マクロの適用

 それでは、作成したマクロを実際に適用してみましょう。

 sheet2に練習用の文字が書かれたシートがありますので、そのシートをクリックしてアクティブにし、A1セルを選択します。

 上部メニューの「拡張機能」⇒「マクロ」⇒「headstyle」を順にクリックすると、1行目にマクロで記録した内容が適用されます。

マクロ内容を変更して適用

 それでは、マクロ内の背景を薄いブルーに、文字色を濃いブルーに変更してみましょう。

 スクリプトの背景の部分と文字色の部分を次のように変更し、スクリプトを保存しましょう。

spreadsheet.getActiveRangeList().setBackground('#afeeee')
.setFontColor('#191970')

 元のシートに戻り、sheet2のA1を選択して、マクロの「hardstyle」を適用してみましょう。

カスタム関数

 カスタム関数とは、自分で作成した関数(自作関数)のことで、作成した関数はGoogle シート内で利用できます。

 Googleの学習では、米ドルをスイスフランへ変更するカスタム関数を作成していますが、ここでは、もっと簡単な円の面積を求めるカスタム関数の作成について紹介します。

ファイルの追加から円の面積のカスタム関数の作成

 App Script画面で右上の「ファイル +」⇒「スクリプト」をクリックして、無題を「circleArea」に「myFunction()」⇒「circleArea(r)」に変更し、中に円の面積を返す「return 3.14 * r  * r」式を加え、保存をクリックします。

円の面積のカスタム関数の動作の確認

 元のシートに戻り、sheet2の「A4」セルに10を入れ、その横の「B4」セルに先ほど作成した円の面積のカスタム関数「=circleArea(A4)」を記入すると、「Loading」と表示されたあと、円の面積の値「314」が表示されることが分かり、ちゃんと機能していることが分かります。

円の面積に円周率に正確なGASの関数を利用

 円の面積を求める際に、円の円周率に「3.14」を用いていましたが、GASの関数である「Math.PI」を用いて、同様に計算してみましょう。

 円の面積を求める部分を次のように書き換え、保存します。

const pai = Math.PI; //円周率のGAS関数を変数paiに代入
return pai * r * r ; //円の面積を返す。

 すると、円の面積の結果の部分は「314.1592654」とかわり、正確な円周率が用いられて円の面積が計算されていることが分かります。

ドキュメンテーションコメント

 カスタム関数を作成しましたが、シート上で関数をセルに書き込む際に全て間違えずに書き込む必要があります。

 しかし、「/**」ではじまり「*/」で終わるコメントを付け、円の面積である内容に書き換えることにより、セル内に式を記入する際に「ci」まで入力した段階で候補が表示され、候補の中から円の面積の「circleArea」を選べるようになります。

/**
* 円の面積を返す関数
* 
* @param {number} 円の半径
* @return {number} 円の面積
* @customfunction
*/
function CircleArea(r) { // 円の面積のカスタム関数
const pai = Math.PI; //円周率のGAS関数を変数paiに代入
return pai * r * r ; //円の面積を返す。
}

カスタム機能のガイドライン

  最後になりますが、Google のサイトによるとカスタム関数を作成する際には、次のことに注意する必要があります。

  1. ユーザー認証を必要とするカスタム関数を作成しないこと
  2. カスタム関数に別の組み込み関数と同じ名前を付けたり、名前の最後にアンダースコアを付けたりしないこと
  3. カスタム関数に変数引数(=RAND()のような変数)を渡さないこと
  4. 完了するまでに30秒以上かかる関数を作成しないこと

おわりに

 如何だったでしょうか?

 スプレッドシートでマクロの作成、練習用Googleスプレッドシートの読み込み、マクロの作成、スクリプトエディターでマクロを見る、マクロの適用、マクロ内容を変更して適用、カスタム関数、ファイルの追加から円の面積のカスタム関数の作成、円の面積のカスタム関数の動作の確認、円の面積に円周率に正確なGASの関数を利用、ドキュメンテーションコメント、カスタム機能のガイドラインなどについて解説してきました。

 この記事が少しでもあなたにとって役に立てればこれほど嬉しいことはありません。

以上です。

 

 

コメント

タイトルとURLをコピーしました