交替循环(顶部/(底部序列
Alternating Cycle (T)op/(B)ottom Sequence
需要单个数组公式或将一个公式拖下将根据规则集显示交替序列的列。规则集和详细示例在此处随附的 link 中。
https://docs.google.com/spreadsheets/d/1Sdi1jFpBKF2RJeqWNjLybVcwR0G6hvozZZTvcTK1xis/edit?usp=sharing
=ARRAYFORMULA(IF(IFERROR(VLOOKUP(INDIRECT("C2:C"&COUNTA(C2:C)),
MIN(FILTER(C2:C, D2:D<45, D2:D<>"")), 1, 0))<>"", "B", ))
设单元格 E79 为:
=IF(E79>55, "T",
IF(E79<45, "B",
LOOKUP(MIN(MAX(INDEX(E2:E78,
MATCH(1,INDEX((E2:E78>55)+(E2:E78<45)*(E2:E78<>""), ), 0)), 45), 55),
{45,55}, {"B", "T"})))
将其粘贴到单元格 E78 中并向上拖动:
=IF(((E78<55)*(E78>45))*((E79<55)*(E79>45)),,
IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="T")*(E78<=55)*(E79>=45), "B",
IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="B")*(E78> 45)*(E79< 55), "T", )))
将此粘贴到 G2 单元格中:
=ARRAYFORMULA(INDEX(SORT({VLOOKUP(ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))), IF(INDEX(SORT({
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)<>"", {ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))),INDEX(SORT({
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)}), 2, 1), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1))
并将其粘贴到 H2 单元格中:
=ARRAYFORMULA(
IF(G2:G="T", IFERROR(VLOOKUP(C2:C, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="T", C2:C, )&
IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1, "where Col1 is not null", 0)),
"select "&TEXTJOIN(",", 1, IF(LEN(FILTER(F2:F, F2:F="T")),
"max(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"),
FILTER(F2:F, F2:F="T")}, 2, 0)),
IF(G2:G="B", IFERROR(VLOOKUP(D2:D, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
REGEXREPLACE(TO_TEXT(
SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="B", D2:D, )&
IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1), "^0$", "999999999")*1,
"where Col1 is not null", 0)), "select "&TEXTJOIN(",", 1,
IF(LEN(FILTER(F2:F, F2:F="B")),
"min(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"),
FILTER(F2:F, F2:F="B")}, 2, 0)), )))
spreadsheet demo
需要单个数组公式或将一个公式拖下将根据规则集显示交替序列的列。规则集和详细示例在此处随附的 link 中。
https://docs.google.com/spreadsheets/d/1Sdi1jFpBKF2RJeqWNjLybVcwR0G6hvozZZTvcTK1xis/edit?usp=sharing
=ARRAYFORMULA(IF(IFERROR(VLOOKUP(INDIRECT("C2:C"&COUNTA(C2:C)),
MIN(FILTER(C2:C, D2:D<45, D2:D<>"")), 1, 0))<>"", "B", ))
设单元格 E79 为:
=IF(E79>55, "T",
IF(E79<45, "B",
LOOKUP(MIN(MAX(INDEX(E2:E78,
MATCH(1,INDEX((E2:E78>55)+(E2:E78<45)*(E2:E78<>""), ), 0)), 45), 55),
{45,55}, {"B", "T"})))
将其粘贴到单元格 E78 中并向上拖动:
=IF(((E78<55)*(E78>45))*((E79<55)*(E79>45)),,
IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="T")*(E78<=55)*(E79>=45), "B",
IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="B")*(E78> 45)*(E79< 55), "T", )))
将此粘贴到 G2 单元格中:
=ARRAYFORMULA(INDEX(SORT({VLOOKUP(ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))), IF(INDEX(SORT({
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)<>"", {ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))),INDEX(SORT({
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)}), 2, 1), ROW(
INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1))
并将其粘贴到 H2 单元格中:
=ARRAYFORMULA(
IF(G2:G="T", IFERROR(VLOOKUP(C2:C, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="T", C2:C, )&
IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1, "where Col1 is not null", 0)),
"select "&TEXTJOIN(",", 1, IF(LEN(FILTER(F2:F, F2:F="T")),
"max(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"),
FILTER(F2:F, F2:F="T")}, 2, 0)),
IF(G2:G="B", IFERROR(VLOOKUP(D2:D, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
REGEXREPLACE(TO_TEXT(
SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="B", D2:D, )&
IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1), "^0$", "999999999")*1,
"where Col1 is not null", 0)), "select "&TEXTJOIN(",", 1,
IF(LEN(FILTER(F2:F, F2:F="B")),
"min(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"),
FILTER(F2:F, F2:F="B")}, 2, 0)), )))