【GAS初心者】getDataRange関数でのシートの値の取り方6step+1try(GAS)


一緒に実例を見ながら、
操作方法を学んでいきましょう。


※以下、全てsheetは省略しています。
全てのスクリプトの1行目に以下を記入してください。

     var sheet = SpreadsheetApp.getActiveSheet();





今回使うシート
--------------

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/b41b4f4c-986f-d631-c051-6ad64265ea83.png)


まず覚えるもの
--------------
スプレッドシート全体を取得

```javascript:全体の値を取得
sheet.getDataRange().getValues();
//[[1ケタ, 2ケタ, 3ケタ, 4ケタ, 5ケタ], [1.0, 10.0, 100.0, 1000.0, 10000.0], [2.0, 20.0, 200.0, 2000.0, 20000.0], [3.0, 30.0, 300.0, 3000.0, 30000.0], [4.0, 40.0, 400.0, 4000.0, 40000.0], [5.0, 50.0, 500.0, 5000.0, 50000.0], [6.0, 60.0, 600.0, 6000.0, 60000.0], [7.0, 70.0, 700.0, 7000.0, 70000.0], [8.0, 80.0, 800.0, 8000.0, 80000.0], [9.0, 90.0, 900.0, 9000.0, 90000.0], [10.0, 100.0, 1000.0, 10000.0, 100000.0], [11.0, 110.0, 1100.0, 11000.0, 110000.0], [12.0, 120.0, 1200.0, 12000.0, 120000.0], [13.0, 130.0, 1300.0, 13000.0, 130000.0], [14.0, 140.0, 1400.0, 14000.0, 140000.0], [15.0, 150.0, 1500.0, 15000.0, 150000.0], [16.0, 160.0, 1600.0, 16000.0, 160000.0], [17.0, 170.0, 1700.0, 17000.0, 170000.0], [18.0, 180.0, 1800.0, 18000.0, 180000.0], [19.0, 190.0, 1900.0, 19000.0, 190000.0], [20.0, 200.0, 2000.0, 20000.0, 200000.0]]
```

早速いろんな扱い方に挑戦しよう
--------------
##開始セル指定して、指定範囲の値を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/009d6733-687e-35f1-3409-1196cc8dfe22.png)

```javascript:例1
  var start_row,start_col //開始行,開始列 --> A1なら(1,1)、A2なら(2,1)
  start_row = 2
  start_col = 1 
  var last_col = sheet.getLastColumn();
  var last_row = sheet.getLastRow();
  var range = sheet.getRange(start_row, start_col, last_row, last_col).getValues();
  Logger.log(range.filter(String));//空白をのぞいて表示
  //[[1.0, 10.0, 100.0, 1000.0], [2.0, 20.0, 200.0, 2000.0], [3.0, 30.0, 300.0, 3000.0], [4.0, 40.0, 400.0, 4000.0], [5.0, 50.0, 500.0, 5000.0], [6.0, 60.0, 600.0, 6000.0], [7.0, 70.0, 700.0, 7000.0], [8.0, 80.0, 800.0, 8000.0], [9.0, 90.0, 900.0, 9000.0], [10.0, 100.0, 1000.0, 10000.0], [11.0, 110.0, 1100.0, 11000.0], [12.0, 120.0, 1200.0, 12000.0], [13.0, 130.0, 1300.0, 13000.0], [14.0, 140.0, 1400.0, 14000.0], [15.0, 150.0, 1500.0, 15000.0], [16.0, 160.0, 1600.0, 16000.0], [17.0, 170.0, 1700.0, 17000.0], [18.0, 180.0, 1800.0, 18000.0], [19.0, 190.0, 1900.0, 19000.0], [20.0, 200.0, 2000.0, 20000.0]]
```


##1行目のみを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/a1a1ac95-b568-acb2-d52b-5f02e3565e2d.png)

```javascript:例2
values = sheet.getDataRange().getValues(); //全体
values[0]//[1ケタ, 2ケタ, 3ケタ, 4ケタ, 5ケタ]
```
##1行目の1列目（A1）を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/17a9f98b-15fc-3984-0249-c380e3faa67e.png)

```javascript:例3
values = sheet.getDataRange().getValues(); //全体
values[0][0]//「1ケタ」
```

##行数を調べる & そのまま最終行の値を調べる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/59c49fa4-1182-01f1-77ea-75846e2c0098.png)

```javascript:例4
values = sheet.getDataRange().getValues(); //全体
numRow = values.length//	21
values[numRow];//21行目の値が出てくる -->[20.0, 200.0, 2000.0, 20000.0, 200000.0]
```

##シート全体の「最終行」と「最終列」を取得

```javascript:例5
sheet.getDataRange().getValues(); //全体
sheet.getLastRow();// 21
sheet.getLastColumn();// 5

```

##特定列を直接抜き出す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/845a3754-27b5-1bbe-cdb9-39ac793df963.png)

```javascript:例6
var Values_E = sheet.getRange('E2:E').getValues();//項目をのぞいたE列の値を全て取得
Values_E.filter(String)//空白をのぞいて表示  -->[[10000.0], [20000.0], [30000.0], [40000.0], [50000.0], [60000.0], [70000.0], [80000.0], [90000.0], [100000.0], [110000.0], [120000.0], [130000.0], [140000.0], [150000.0], [160000.0], [170000.0], [180000.0], [190000.0], [200000.0]]
```


#Try:値の一致をマークしよう！

上記のコードを用いて、「E列内で特定の値に一致したらF列に記入する」に挑戦してみましょう。

1. E列の値を取得
2. 1つずつ値を取り出してみる
3. 値が一致していたら、同じ行のF列に「OK」と記入する

この段取りでやってみます。


##1. E列の値を取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616412/9618f7f7-baf7-8cf5-457a-998abc3bfeb4.png)

これは[例6：特定列を直接抜き出す
](https://qiita.com/Rihoritsuko/items/d1a26833ead17505e302#%E7%89%B9%E5%AE%9A%E5%88%97%E3%82%92%E7%9B%B4%E6%8E%A5%E6%8A%9C%E3%81%8D%E5%87%BA%E3%81%99)
で学習しました。

```javascript:1.E列の値を取得
//現在扱っているシートを取得
var sheet = SpreadsheetApp.getActiveSheet();
//E2以降のE列を取得（空白を処理する）
var Values_E = sheet.getRange('E2:E').getValues().filter(String);
//結果を表示
Logger.log(Values_E);
```

>[[10000.0], [20000.0], [30000.0], [40000.0], [50000.0], [60000.0], [70000.0], [80000.0], [90000.0], [100000.0], [110000.0], [120000.0], [130000.0], [140000.0], [150000.0], [160000.0], [170000.0], [180000.0], [190000.0], [200000.0]]

##2. 1つずつ値を取り出してみる

これは、forというループ処理をします。

```javascript:2.1つずつ値を取り出してみる

for(var i = 1; i <= Values_E.length; i++) {
  //処理
}
```

##3. 値が一致していたら、同じ行のF列に「OK」と記入する

この処理の場所で、「値の一致の有無」と「F列への書き込み」を行います。
今回は、**40000**という値があればF列に「OK」と書き込みます。

```javascript:3.値が一致していたら、同じ行のF列に「OK」と記入する
if(Math.floor(Values_E[i]) === 40000){ //i個目が一致していたら
    sheet.getRange(i+2, 6).setValue("OK"); //F列＝6列目
    Logger.log("書き込みました")
```


全コードはこちら（まとめてあります）

```javascript:全コード

function searchword(){

  //ユーザー変更部分------------
  //検索ワード
  var search_word = 40000 
  //書き込むワード
  var input_word = "OK"
  //何列の何行目から検索するか
  var search_col =  "E"
  var search_row =  2
  //何列目に書き込むか
  var input_col =  6 
  
  //以下コード-------------------
  var sheet = SpreadsheetApp.getActiveSheet();  
  var Values_E = sheet.getRange(search_col+String(search_row)+':'+search_col).getValues().filter(String);//項目をのぞいたE列の値を全て取得
  Logger.log(Values_E);
  for(let i = 0; i <= Values_E.length-1; i++) { //1つずつ取り出す
    if(Math.floor(Values_E[i]) === search_word){ //i個目が一致していたら
      sheet.getRange(i+search_row, input_col).setValue(input_word); //F列＝6列目
      Logger.log("書き込みました")
    }else{
    Logger.log("除外しました",Math.floor(Values_E[i]))
    }
  }
  Logger.log("終了しました")
}
```