##0.はじめに
この記事ではGASからSpreadsheetのセル操作における、セル内に値を入力(セット)する方法を記録する。
1.特定のセル(単体)に値を入力する。
2.特定のセル(単体)の値を削除(空白を入力)する。
3.sheet内の全てのセルを削除する。
4.特定の範囲のセルに同じ値を入力する。
5.値のある単体セルから値をコピーして、特定のセルに入力する。
6.値のある複数のセルを全てコピーして、特定の範囲のセルに入力する。
##Method
//----単体セルに値を入力----//
rangeObject.setValue("値")
//rangeObjectに格納されているセルに値が入力される。
//----単体セルの値を削除----//
rangeObject.clear();
//単体セルの値を削除するメソッド
//----全てのセルの値を削除----//
dataobject.clear();
//dataobjectに入っている値を全て削除。
##1.特定のセル(単体)に値を入力する。
下記のD5セルは今空白になっている。D5に数字の1をGASから入力(セット)してみる。
function myFunction() {
var ss1 = SpreadsheetApp.openById("SpreadSheet-key");
//spreadsheetをss1に格納。
var sh1 = ss1.getSheetByName("sheet1");
//特定のシート(sheet1)をsh1に格納
var sell1 = sh1.getRange('D5');
//sell1にD5を格納
sell1.setValue(1);
//sell5(D5)に1をセット
Logger.log(sell5.getValue());
###結果
ログ結果
シートのD5にもしっかりと1がセットされている。
####【番外編】すでに値が入っていて異なる値をセットするとどうなるのか?
これはデータベースと同じ考え方で「更新」される。
D5に1が入っている状態で、2をGASからセットすると、D5の値は2になる。
##2.特定のセル(単体)の値を削除(空白を入力)する。
特定のセルの値を削除する方法は二つある。結果は何も同じ結果になる。
####2-1.setValuesを使って削除する。
rangeObject.setValues('');
####2-2.clearを使って削除する。
rangeObject.clear();
##3.特定のSheet内の全てのセルの値を削除する。
シートに以下のように値が入力されている。
以下の値を全て削除する。
これには、dataメソッドを使って、clearをすれば良い。
function myFunction() {
var ss1 = SpreadsheetApp.openById("Spreadsheet-key");
//spreadsheetをss1に格納
var sh1 = ss1.getSheetByName("sheet1");
//sheet1をsh1に格納
var data1 = sh1.getDataRange();
//sh1の値をdataとしてdata1に格納
data1.clear();
//data1の値をクリア
###結果
スクリプトを実行すると、下記のように値が全て削除されている。
##4.特定の範囲のセルに同じ値を入力する。
指定の範囲のセルを削除するには、rangeObjectの指定でセルの範囲指定を行えば良い。
例えば、以下のように値が入っていて、D1~D5の値を削除したいとする。
以下のように、getRange("D1:D5")と指定する。
var ss1 = SpreadsheetApp.openById("SpreadSheet-key");
//spreadsheetをss1に格納。
var sh1 = ss1.getSheetByName("sheet1");
//特定のシート(sheet1)をsh1に格納
var range1 = sh1.getRange("D1:D5");
//range1にD1~D5の値を格納。
range1.clear();
##5.単体セルから値をコピーして、他ののセルにセットする。
これは分解するとわかりやすい。手順を以下のようにすれば良い。
1.特定のセルの値を取得してxに格納
2.入力したいセルをgetrangeで取得してyに格納。
3.setValueでyにxをセット。
以下のようにA列には数字の値が入っている。A1の1をC1にコピーすることをやってみる。
var ss1 = SpreadsheetApp.openById("SpreadSheet-key");
//spreadsheetをss1に格納。
var sh1 = ss1.getSheetByName("sheet1");
//特定のシート(sheet1)をsh1に格納
var range1 = sh1.getRange("A1");
//指定するセルを取得
var values = range1.getValue();
//range1の値を取得
var range2 = sh1.getRange("C1");
//コピー先のセルを取得
range2.setValue(values);
//コピー先にrange1の値をセット
###結果
以下のようにA1の値がC1にセットされた。
##6.特定の範囲のセルの値をコピーして他の範囲のセルに入力する。
Aの列に以下の値がセットされているとする。これをCの列にコピーする。
手法はいくつかあるが、ここではfor文を使ってみる。
for文を使って値を取得して、セットする動作を10回繰り返す。
function myFunction() {
var ss1 = SpreadsheetApp.openById("SpreadSheet-key");
//spreadsheetをss1に格納。
var sh1 = ss1.getSheetByName("sheet1");
//特定のシート(sheet1)をsh1に格納
for(var i = 1;i <= 10;i++)
{
var range1 = sh1.getRange(i,1);
//A列を1からrange1に格納。
var values = range1.getValue();
//range1のセルの値をvaluesに格納。
var range2 = sh1.getRange(i,3);
//C列を1からrange2に格納。
range2.setValue(values);
//range2にvaluesの値をセット。
}
##まとめ
範囲の値を配列で扱うか、for文を用いて一つ一つ処理をしていくかは、用途によって分けると良いかと思います。
膨大なデータを扱う場合は、datarangeでSheetの値を一括で取得して、配列で扱うのが早いかなと。
実際にスクリプトが動いてくれると本当に嬉しいですね。
早くGMailやカレンダーの操作も自由自在になりたい・・・・・
以上です。