「計算式エラーで残業確定……」、GASで入力データのチェックツールを作成:働く価値を上げる“VBA/GAS術”(4)(2/4 ページ)
1つのGoogleスプレッドシートを複数人で共同編集するとき、想定していた形式とは違うデータを入力されると、不備が発生してしまう場合があります。そのような問題を、GASで解決するにはどうすればいいのでしょうか。
データチェックツールのスクリプト
では関数「checkNumber」の内容について解説をしていきます。
varキーワードで変数を宣言する
まず、スクリプトの冒頭、以下の部分を見ていきます。
var sheet = SpreadsheetApp.getActiveSheet();
ここでは「var」というキーワードを使って、sheetという名前の変数の宣言を行っています。変数は、数値や文字列などのデータ、またシートやセル範囲といったオブジェクトなどを一時的に記憶するものです。varによる変数宣言の書式は以下の通りです。
var 変数名
ちなみに、VBAでは「変数宣言のときにデータ型の指定」が必要でしたが、GASの場合は宣言時にデータ型の指定はありません。
getActiveSheetメソッドでシートを取得する
前述のステートメントでは変数の宣言と同時に「代入」も行っています。その処理をしている以下の式の説明をしていきましょう。
SpreadsheetApp.getActiveSheet()
まずGASでは、スプレッドシートのアプリケーション、シート、セル範囲などを取り扱うことができますが、それら操作する対象を「オブジェクト」といいます。また、オブジェクトに対して何らかの操作をするときには、「.」に続けて「メソッド」と呼ばれる命令を付与します。これを書式として表すと、以下のような記述になります。
オブジェクト.メソッド(引数)
メソッドの後に続く丸括弧内には引数と呼ばれる値を入力します。引数はメソッドによって、その数と内容が異なります。
「SpreadsheetApp.getActiveSheet()」は、「SpreadsheetApp」オブジェクトに対して、「getActiveSheetメソッド」を使用せよという命令になります。SpreadsheetAppは、スプレッドシートのアプリケーション自体を表すオブジェクト。getActiveSheetは、現在スクリプトがコンテナバインドされているアクティブなスプレッドシートをSheetオブジェクトとして取得するメソッドです。
つまり最初のステートメントは、スプレッドシート「備品購入リスト」の「シート1」をSheetオブジェクトとして変数sheetに格納するという命令です。では、実際に取得できるか、以下に記載するテスト用の関数「test()」を使って試してみましょう。
function test() { var sheet = SpreadsheetApp.getActiveSheet(); Logger.log(sheet.getName()); }
「Logger.log()」は指定した値をログ画面に出力する命令です。関数testを実行をして、ログを確認すると「シート1」と表示されます。なお、Sheetオブジェクトの「getName()」メソッドは、Sheetオブジェクトのシート名を取得するメソッドです。
セルの値を参照する
これで、「シート1」がSheetオブジェクトとして、sheetという変数名で取り扱いが可能になりました。続いて、そのシートのセルを参照していきましょう。関数「checkNumber」でいうと以下の部分です。
sheet.getRange(i,3).getValue()
GASでセルを参照する場合は、Sheetオブジェクトに対して、「getRange()」メソッドを使用します。書式は以下の通りです。
Sheetオブジェクト.getRange(行番号,列番号)
行番号、列番号をそれぞれ数値で指定することで、その位置のセルをRangeオブジェクトとして取得することができます。例えばB2セルなら「getRange(2,2)」、D1セルなら「getRange(1,4)」と指定します。
またセルの値を取得するには、Rangeオブジェクトに対して、「getValue()」メソッドを使います。書式は以下の通りです。
Rangeオブジェクト.getValue()
「getRange(i,3)」であれば、i行目、3列目のセルの値を参照していることになります。iは繰り返し構文で使うカウンタ変数ですが、その役割は後述します。
では、実際にセルの値を参照してみましょう。関数testを以下のように書き換えて実行すると、ログにはセルC2の値「5.0」、セルD5の値「1100.0」がそれぞれ出力されます。
function test() { var sheet = SpreadsheetApp.getActiveSheet(); Logger.log(sheet.getRange(2,3).getValue()); Logger.log(sheet.getRange(5,4).getValue()); }
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Excelでプログラム作成を始めるメリットとマクロの基本
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。初回は、そもそもプログラミングとは何か、Visual BasicとVBAとマクロの違い、マクロの作り方、保存/削除、セキュリティ設定などについて【Windows 10、Excel 2016に対応】。 - Google Apps Scriptプログラミングでスプレッドシートを操作するための基礎知識
Googleが提供するGoogle Apps Scriptのプログラミングで、Google Apps(主にスプレッドシート)を操作する方法を解説していく連載。初回は、Google Apps Scriptやスプリプトエディタの概要、スプレッドシートを表示し、Browser.msgBoxメソッドでメッセージを表示する手順などについて解説する。 - Excelでプログラム作成を始めるメリットとマクロの基本
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。初回は、そもそもプログラミングとは何か、Visual BasicとVBAとマクロの違い、マクロの作り方、保存/削除、セキュリティ設定などについて【Windows 10、Excel 2016に対応】。