如何根据另一个值将列表中的下一个字母自动分配到单元格中?
How to auto assign next letter from a list into a cell depending on value of another?
这是一个基本的 sheet,其中包含根据指定单元格中的日期更改的月份天数列表,试图找到一种方法来自动分配列表中的下一个字母并将其放置在单元格中到邻居小区的哪一天。
这是我使用 IFS 得到的最接近结果:
=IFS($B:$B="MONDAY", SORTN($F:$F,1,,RANDARRAY(4),),$B:$B="TUESDAY", SORTN($G:$G,1,,RANDARRAY(4),), $B:$B="WEDNESDAY", SORTN($H:$H,1,,RANDARRAY(4),),$B:$B="THURSDAY", SORTN($I:$I,1,,RANDARRAY(4),), $B:$B="FRIDAY", SORTN($J:$J,1,,RANDARRAY(4),), $B:$B="SATURDAY", SORTN($K:$K,1,,RANDARRAY(4),), $B:$B="SUNDAY", SORTN($L:$L,1,,RANDARRAY(4),))
该方法不选择行中的下一个,而是在范围内随机选择。这可能有效,但一个问题是这可能会连续三个星期一分配相同的字母,另一个问题是默认的“onChange”设置导致公式中的数据随着每次编辑而改变。
Description:F3:L7
字母代表(人名或其他任何东西)可用(在那些日子工作)并且可以出现在列 B:C
中的日历上的每一天。图像中的第 D
列当前是预期的输出。需要它在日历更改时自动更改,当 A4
中的日期更改时,“星期一”不会总是出现在 B4
中。
FIXED Sheet link(大多数措辞是西班牙语):https://docs.google.com/spreadsheets/d/1S14Rd_bujRGkCHxLd_gHg6TwQBA_aUCx5LfxOTdqQyE/edit#gid=0
试试这个:
function myfunc101() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet1');
let [hA,...data]=sh.getRange(3,1,sh.getLastRow(),sh.getLastColumn()).getValues();
let col={};
let idx={};
hA.forEach((h,i)=>{col[h]=i+1;idx[h]=i;})
let al={};
data.forEach((r)=>{
if(!al.hasOwnProperty(r[1])) {
al[r[1]]=[];
al[r[1]].push([r[3]])
} else {
al[r[1]].push([r[3]])
}
});
let wds=['MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY'];
wds.forEach((d)=>{
sh.getRange(4,col[d+'S'],al[d].length,1).setValues(al[d]);
});
}
已修复!使用 Arrayformula
为每个副本分配一个数字,在此处得到想法 https://infoinspired.com/google-docs/spreadsheet/make-duplicates-to-unique-in-google-sheets/ 然后使用描述中的 IFS
公式。 Link 到工作 sheet 将在描述中。
这是一个基本的 sheet,其中包含根据指定单元格中的日期更改的月份天数列表,试图找到一种方法来自动分配列表中的下一个字母并将其放置在单元格中到邻居小区的哪一天。
这是我使用 IFS 得到的最接近结果:
=IFS($B:$B="MONDAY", SORTN($F:$F,1,,RANDARRAY(4),),$B:$B="TUESDAY", SORTN($G:$G,1,,RANDARRAY(4),), $B:$B="WEDNESDAY", SORTN($H:$H,1,,RANDARRAY(4),),$B:$B="THURSDAY", SORTN($I:$I,1,,RANDARRAY(4),), $B:$B="FRIDAY", SORTN($J:$J,1,,RANDARRAY(4),), $B:$B="SATURDAY", SORTN($K:$K,1,,RANDARRAY(4),), $B:$B="SUNDAY", SORTN($L:$L,1,,RANDARRAY(4),))
该方法不选择行中的下一个,而是在范围内随机选择。这可能有效,但一个问题是这可能会连续三个星期一分配相同的字母,另一个问题是默认的“onChange”设置导致公式中的数据随着每次编辑而改变。
Description:F3:L7
字母代表(人名或其他任何东西)可用(在那些日子工作)并且可以出现在列 B:C
中的日历上的每一天。图像中的第 D
列当前是预期的输出。需要它在日历更改时自动更改,当 A4
中的日期更改时,“星期一”不会总是出现在 B4
中。
FIXED Sheet link(大多数措辞是西班牙语):https://docs.google.com/spreadsheets/d/1S14Rd_bujRGkCHxLd_gHg6TwQBA_aUCx5LfxOTdqQyE/edit#gid=0
试试这个:
function myfunc101() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet1');
let [hA,...data]=sh.getRange(3,1,sh.getLastRow(),sh.getLastColumn()).getValues();
let col={};
let idx={};
hA.forEach((h,i)=>{col[h]=i+1;idx[h]=i;})
let al={};
data.forEach((r)=>{
if(!al.hasOwnProperty(r[1])) {
al[r[1]]=[];
al[r[1]].push([r[3]])
} else {
al[r[1]].push([r[3]])
}
});
let wds=['MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY','SUNDAY'];
wds.forEach((d)=>{
sh.getRange(4,col[d+'S'],al[d].length,1).setValues(al[d]);
});
}
已修复!使用 Arrayformula
为每个副本分配一个数字,在此处得到想法 https://infoinspired.com/google-docs/spreadsheet/make-duplicates-to-unique-in-google-sheets/ 然后使用描述中的 IFS
公式。 Link 到工作 sheet 将在描述中。