GoogleAppsScript( GAS )で、必要なデータだけを抽出して新たなシートに書き出す

google

先にコードの全容

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列めの値を基準に降順で並び替え。
引数を指定しないと昇順。

実際の動画

コメント

    タイトルとURLをコピーしました