目次
先にコードの全容
function myFunction() {
var spsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spsheet.getActiveSheet();
var ID = [];
var FirstName = [];
var LastName = [];
var Point = [];
var B_ID = [];
var B_FirstName =[];
var B_LastName = [];
var B_Point = [];
var branchPoint = sheet.getRange('G2').getValue();
var sheetLength = sheet.getLastRow();
for (var i = sheetLength; i >= 2; i--){
ID.push(sheet.getRange(i, 1).getValue());
FirstName.push(sheet.getRange(i, 2).getValue());
LastName.push(sheet.getRange(i, 3).getValue());
Point.push(sheet.getRange(i, 4).getValue());
}
if (ID.length > 0) {
for (var j = 0; j <= ID.length; j++) {
if(Point[j] > branchPoint) {
console.log(Point[j]);
B_ID.push(ID[j]);
B_FirstName.push(FirstName[j]);
B_LastName.push(LastName[j]);
B_Point.push(Point[j]);
}
}
}
if (B_ID.length > 0 ) {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var sheetName = "BranchPoint:"+ year +"/"+month + "-" + branchPoint;
spsheet.insertSheet(sheetName);
}
var newSheet = spsheet.getSheetByName(sheetName);
Utilities.sleep(1000);
newSheet.getRange(1,1).setValue('ID');
newSheet.getRange(1,2).setValue('FirstName');
newSheet.getRange(1,3).setValue('LastName');
newSheet.getRange(1,4).setValue('Point');
for (var h = B_ID.length; h >= 0; h--) {
console.log(B_ID[h]);
newSheet.getRange(h+2,1).setValue(B_ID[h]);
newSheet.getRange(h+2,2).setValue(B_FirstName[h]);
newSheet.getRange(h+2,3).setValue(B_LastName[h]);
newSheet.getRange(h+2,4).setValue(B_Point[h]);
}
Last_Row = newSheet.getLastRow();
Last_Col = newSheet.getLastColumn();
newSheet.getRange(2, 2, Last_Row, Last_Col).sort({column: 4, ascending: false});
}
シートの取得
function myFunction() {
var spsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spsheet.getActiveSheet();
}
今回は、Point の項目で分岐するので分岐点の点数を取得
var branchPoint = sheet.getRange('G2').getValue();
スプレッドシートの値を取得
var ID = [];
var FirstName = [];
var LastName = [];
var Point = [];
var sheetLength = sheet.getLastRow();
for (var i = sheetLength; i >= 2; i--){
ID.push(sheet.getRange(i, 1).getValue());
FirstName.push(sheet.getRange(i, 2).getValue());
LastName.push(sheet.getRange(i, 3).getValue());
Point.push(sheet.getRange(i, 4).getValue());
}
最終行を取得して、for文で回して取得。
先に空の配列を作っておくのがポイント。
条件を満たしている値を配列にする
for文の中にif文を追記
更に新たな配列の入れ物も用意
var B_ID = [];
var B_FirstName =[];
var B_LastName = [];
var B_Point = [];
for (var i = sheetLength; i >= 2; i--){
ID.push(sheet.getRange(i, 1).getValue());
FirstName.push(sheet.getRange(i, 2).getValue());
LastName.push(sheet.getRange(i, 3).getValue());
Point.push(sheet.getRange(i, 4).getValue());
}
if (ID.length > 0) {
for (var j = 0; j <= ID.length; j++) {
if(Point[j] > branchPoint) {
console.log(Point[j]);
B_ID.push(ID[j]);
B_FirstName.push(FirstName[j]);
B_LastName.push(LastName[j]);
B_Point.push(Point[j]);
}
}
}
新しいシートを名前付きで作成
名前は「年」+「月」+「分岐Point」として、
1行目に同じように列名をセット。
注)Utilities.sleep(1000); を挟まないとうまく動かなかったのでいれると良いと思われる。
if (B_ID.length > 0 ) {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var sheetName = "BranchPoint:"+ year +"/"+month + "-" + branchPoint;
spsheet.insertSheet(sheetName);
}
var newSheet = spsheet.getSheetByName(sheetName);
Utilities.sleep(1000);
newSheet.getRange(1,1).setValue('ID');
newSheet.getRange(1,2).setValue('FirstName');
newSheet.getRange(1,3).setValue('LastName');
newSheet.getRange(1,4).setValue('Point');
}
新しく作ったシートに条件を満たした値を書き込んでいく
if文の下にfor文を追記
if (B_ID.length > 0 ) {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var sheetName = "BranchPoint:"+ year +"/"+month + "-" + branchPoint;
spsheet.insertSheet(sheetName);
}
var newSheet = spsheet.getSheetByName(sheetName);
Utilities.sleep(1000);
newSheet.getRange(1,1).setValue('ID');
newSheet.getRange(1,2).setValue('FirstName');
newSheet.getRange(1,3).setValue('LastName');
newSheet.getRange(1,4).setValue('Point');
for (var h = B_ID.length; h >= 0; h--) {
console.log(B_ID[h]);
newSheet.getRange(h+2,1).setValue(B_ID[h]);
newSheet.getRange(h+2,2).setValue(B_FirstName[h]);
newSheet.getRange(h+2,3).setValue(B_LastName[h]);
newSheet.getRange(h+2,4).setValue(B_Point[h]);
}
最後にPointの高い順に並び替え
Last_Row = newSheet.getLastRow();
Last_Col = newSheet.getLastColumn();
newSheet.getRange(2, 2, Last_Row, Last_Col).sort({column: 4, ascending: false});
新しく作られたシートのA列2行目から最終行、最終列を指定し、sort。
sortでは、4列めの値を基準に降順で並び替え。
引数を指定しないと昇順。