「計算式エラーで残業確定……」、GASで入力データのチェックツールを作成働く価値を上げる“VBA/GAS術”(4)(2/4 ページ)

» 2017年10月18日 05時00分 公開
[高橋宣成プランノーツ]

データチェックツールのスクリプト

 では関数「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.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。