前提
GASでスプレッドシートから自動で名前リストを作成する
システムを作っています。
実現したいこと
それぞれの列での最終値を取得し、
その列の対応の最終地の値を返したい。
発生している問題・エラーメッセージ
//scheduleのstaffの名前の配列を取得 以下のところで、
for文を使ってるのですが、
上位sがあるので、
それぞれの列の最終値が返されません。
s=2の時、scdLastRow[0]
s=5の時、scdLastRow[1]
というようにやりたいのですが、何か方法はありますでしょうか。
該当のソースコード
ffunction ListCreate() {
const ash = SpreadsheetApp.getActiveSpreadsheet()
const scd = ash.getSheetByName("schedule")
const mgmt = ash.getSheetByName("management")
let scdName = []
let mgmtName = []
let scdLastRow = []
//列の最終値をしたから取得
for (let r=2; r<=13; r=r+5) {
const lastRowDate = scd.getRange(scd.getMaxRows(),r).getNextDataCell(SpreadsheetApp.Direction.UP).;
scdLastRow.push(lastRowDate)
}
const scdLastRowLen = scdLastRow.length
//scheduleのstaffの名前の配列を取得
for (let s=2; s<=13; s=s+5) {
for (let y=0; y<scdLastRowLen; y++) {
for (let i=5; i <=scdLastRow[y]; i++) {
const scdStaffName = scd.getRange(i,s).getValue()
scdName.push(scdStaffName)
}
}
}
//managementのstaffの名前の配列を取得
for (let i=2; i<=mgmt.getLastRow(); i++) {
const mgmtStaffName = mgmt.getRange(i,1).getValue()
mgmtName.push(mgmtStaffName)
}
let nameAll = scdName.filter(i=>mgmtName.indexOf(i)==-1)
const nameAllLen = nameAll.length
for (let x=0; x<nameAllLen; x++) {
mgmt.getRange(mgmt.getLastRow()+1,1).setValue(nameAll[x])
}
Logger.log(scdLastRow)
}
0 コメント