0
0

More than 3 years have passed since last update.

【GAS】セルの操作(値入力編)(Spreadsheet)

Posted at

0.はじめに

この記事ではGASからSpreadsheetのセル操作における、セル内に値を入力(セット)する方法を記録する。

1.特定のセル(単体)に値を入力する。
2.特定のセル(単体)の値を削除(空白を入力)する。
3.sheet内の全てのセルを削除する。
4.特定の範囲のセルに同じ値を入力する。
5.値のある単体セルから値をコピーして、特定のセルに入力する。
6.値のある複数のセルを全てコピーして、特定の範囲のセルに入力する。

Method

//----単体セルに値を入力----//
rangeObject.setValue("")
//rangeObjectに格納されているセルに値が入力される。

//----単体セルの値を削除----//
rangeObject.clear();
//単体セルの値を削除するメソッド

//----全てのセルの値を削除----//
dataobject.clear();
//dataobjectに入っている値を全て削除。

1.特定のセル(単体)に値を入力する。

下記のD5セルは今空白になっている。D5に数字の1をGASから入力(セット)してみる。
image.png

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());  

結果

ログ結果
image.png
シートのD5にもしっかりと1がセットされている。
image.png

【番外編】すでに値が入っていて異なる値をセットするとどうなるのか?

これはデータベースと同じ考え方で「更新」される。
D5に1が入っている状態で、2をGASからセットすると、D5の値は2になる。

2.特定のセル(単体)の値を削除(空白を入力)する。

特定のセルの値を削除する方法は二つある。結果は何も同じ結果になる。

2-1.setValuesを使って削除する。

rangeObject.setValues('');

2-2.clearを使って削除する。

rangeObject.clear();

3.特定のSheet内の全てのセルの値を削除する。

シートに以下のように値が入力されている。
以下の値を全て削除する。

これには、dataメソッドを使って、clearをすれば良い。
image.png

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の値をクリア

結果

スクリプトを実行すると、下記のように値が全て削除されている。
image.png

4.特定の範囲のセルに同じ値を入力する。

指定の範囲のセルを削除するには、rangeObjectの指定でセルの範囲指定を行えば良い。
例えば、以下のように値が入っていて、D1~D5の値を削除したいとする。
image.png

以下のように、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();

結果

image.png

5.単体セルから値をコピーして、他ののセルにセットする。

これは分解するとわかりやすい。手順を以下のようにすれば良い。
1.特定のセルの値を取得してxに格納
2.入力したいセルをgetrangeで取得してyに格納。
3.setValueでyにxをセット。

以下のようにA列には数字の値が入っている。A1の1をC1にコピーすることをやってみる。
image.png


  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にセットされた。

image.png

6.特定の範囲のセルの値をコピーして他の範囲のセルに入力する。

Aの列に以下の値がセットされているとする。これをCの列にコピーする。
image.png

手法はいくつかあるが、ここでは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の値をセット。
  }

結果

image.png

まとめ

範囲の値を配列で扱うか、for文を用いて一つ一つ処理をしていくかは、用途によって分けると良いかと思います。
膨大なデータを扱う場合は、datarangeでSheetの値を一括で取得して、配列で扱うのが早いかなと。
実際にスクリプトが動いてくれると本当に嬉しいですね。

早くGMailやカレンダーの操作も自由自在になりたい・・・・・

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0