編輯 - 已解決
我必須為明年的同事制定輪換時間表。一些同事有標準的休息日,我不想在那些日子里安排他們。
這是我想得到的手動結果。示例:顧問 A 在星期一不作業,所以我不希望顧問 A 在星期一被添加到日程表中。然后,我希望將顧問 B 添加到日程表中作為補充。顧問 A 將在星期二等下排。接下來是顧問 C,但顧問 C 在星期三不作業。因此,我們需要在星期三請顧問 D,在星期四請顧問 C,依此類推。當我們在 F 列的最后一個顧問時,它需要從顧問 A 重新開始。

我嘗試過各種公式,比如 if 陳述句和 arrayformula。但是我知道沒有辦法只用公式回圈遍歷 F 列。我不確定這是否完全清楚我想在這里實作的目標,我被卡住了??
我還使用附加組件將日程安排發送到每個人的議程,這也是我喜歡自動執行此操作的原因,因為它對我有很大幫助。
我確實嘗試過一些編碼,但我不是編碼員,我不確定分享我的失敗是否有幫助??但這是我迄今為止嘗試過的:
function Loop() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var EndRow = ss.getLastRow();
for (var i = 2; i <= EndRow; i ) {
var Day = ss.getRange(i,2).getValue();
var Consultants = ss.getRange(i,6).getValue();
var Off = ss.getRange(i,7).getValue ();
var Count = ss.getRange(i,8).getValue();
if(Day == Off){
ss.getRange(i, 3).setValue(Consultants)
}else{
ss.getRange(i, 3).setValue(Consultants)
}
}
}
編輯:
我找到了一種不使用應用程式腳本的方法,手動花費了我一些作業,并首先嘗試使用較短的團隊串列。突出顯示的黃色單元格是休息日與作業日單元格相同的單元格。所以他們換了。我確實必須復制粘貼我的顧問輸入串列,但如果這是唯一的手動方式,那很好:)

uj5u.com熱心網友回復:
試試這個:
代碼:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Sheet1");
var dayCol = sh.getRange("B2:B343").getValues().flat(); //get day column values and convert it to 1d array
var dayOffCol = sh.getRange("G2:G9").getValues().flat(); //get day off values and convert it to 1d array
var dayOffColCopy; //initialize copy
var consCol = sh.getRange("F2:F9").getValues().flat(); //get consultants values or column F
var consColCopy; //initialize copy
var tempArray = []; //storage of final value for column C
for(var i = 0; i < dayCol.length; i ){ //loop through dayCol values
var ctr = (i % consCol.length); //used modulo as counter. the value will return to 0 if the value of i is divisible to the length of consCol or in example 8
//The if statement below will help up reset the value of
//consColCopy and dayOffColCopy once the values are emptied because of the splice()
if(ctr == 0){
consColCopy = consCol.slice();
dayOffColCopy = dayOffCol.slice();
}
//the loop below will get the first non-matching values of dayCol and dayOffColCopy,
//the first non-matching values will be removed to the copy variables using splice()
//and insert it to tempArray using push()
for(var j = 0; j < dayOffColCopy.length; j ){ //loop through dayOffColCopy values
if(dayCol[i] != dayOffColCopy[j]){
tempArray.push(consColCopy.splice(j, 1));
dayOffColCopy.splice(j, 1);
break; //exit loop
}
}
}
sh.getRange(2, 3, tempArray.length, 1).setValues(tempArray); //set the values of temp array to column C
}
示例資料和輸出:

注意:確保使用在您的范圍內包含資料的單元格并更改作業表名稱。我還在我的代碼中添加了注釋來解釋這個程序。
參考:
- Array.prototype.push()
- Array.prototype.slice()
- Array.prototype.splice()
- 班級范圍
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383700.html
上一篇:將二維網格搜索代碼擴展和優化到N維(使用itertools)
下一篇:如何將回圈轉換為應用函式
