一緒に実例を見ながら、
操作方法を学んでいきましょう。
※以下、全てsheetは省略しています。
全てのスクリプトの1行目に以下を記入してください。
var sheet = SpreadsheetApp.getActiveSheet();
今回使うシート
まず覚えるもの
スプレッドシート全体を取得
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]]
早速いろんな扱い方に挑戦しよう
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]]
values = sheet.getDataRange().getValues(); //全体
values[0]//[1ケタ, 2ケタ, 3ケタ, 4ケタ, 5ケタ]
values = sheet.getDataRange().getValues(); //全体
values[0][0]//「1ケタ」
values = sheet.getDataRange().getValues(); //全体
numRow = values.length// 21
values[numRow];//21行目の値が出てくる -->[20.0, 200.0, 2000.0, 20000.0, 200000.0]
##シート全体の「最終行」と「最終列」を取得
sheet.getDataRange().getValues(); //全体
sheet.getLastRow();// 21
sheet.getLastColumn();// 5
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列に記入する」に挑戦してみましょう。
- E列の値を取得
- 1つずつ値を取り出してみる
- 値が一致していたら、同じ行のF列に「OK」と記入する
この段取りでやってみます。
##1. E列の値を取得
これは例6:特定列を直接抜き出す
で学習しました。
//現在扱っているシートを取得
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というループ処理をします。
for(var i = 1; i <= Values_E.length; i++) {
//処理
}
##3. 値が一致していたら、同じ行のF列に「OK」と記入する
この処理の場所で、「値の一致の有無」と「F列への書き込み」を行います。
今回は、40000という値があればF列に「OK」と書き込みます。
if(Math.floor(Values_E[i]) === 40000){ //i個目が一致していたら
sheet.getRange(i+2, 6).setValue("OK"); //F列=6列目
Logger.log("書き込みました")
全コードはこちら(まとめてあります)
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("終了しました")
}