公式和条件格式公式查找丢失的序列号

问题描述 投票:0回答:1

我想要一个能给出精确结果的公式,如 E2(在单个单元格中)和一个突出显示所有红色的条件格式公式。
公式解释:
对于“FIN YEAR”X-X中的“STUDIO”A,缺少数字 2,4,类似地,O-O 3,5,6,7。
对于“FIN YEAR”X-X中的“STUDIO”B,没有缺少数字,但对于O-O 1,2,3(因此仅显示(O-O))。
对于“FIN YEAR”中的“STUDIO”C X-X & O-O 没有缺失的号码。 (所以 C: 不显示)。
条件格式说明:
任何缺失数字之后的所有数字都会突出显示为红色。

Google 表格链接

注意:
每个“STUDIO”的每个“FIN YEAR”的数字从 1 开始。
数字可以重复任意次数。
每个输入都是随机的,任何列都没有顺序。

google-sheets google-sheets-formula
1个回答
0
投票

您可以使用以下 2 种方法来查找缺失的号码:

方法1:Google表格公式

=let(
studio, "A",
arr, sort(filter(A2:C, A2:A=studio),2,0),
arr_x, torow(unique(filter(arr, index(arr,,2)="X-X"))),
arr_o, torow(unique(filter(arr, index(arr,,2)="O-O"))),
find_x, IFNA(join(",", torow(filter(sequence(max(arr_x),1,1), countif(arr_x,sequence(max(arr_x),1,1))=0))),"No Missing"),
find_o, IFNA(join(",", torow(filter(sequence(max(arr_o),1,1), countif(arr_o,sequence(max(arr_o),1,1))=0))),"No Missing"),
output, map(unique(index(arr,,2)), vstack(find_x,find_o), lambda(a,b,concat(concat(a,": "), b))),
join(char(10), "MISSING NUMBERS:", concat(studio,":"), output)
)

注意:如果您使用Google Sheets公式,您需要注意两个限制:(1)您需要在公式中手动输入

Studio
字母或使用下拉菜单选择
Studio
字母。 (2) 如果您要添加新的
Studio
字母,则需要同时拥有
X-X
O-O
对。

输出:

方法 2:Google Apps 脚本

    function missingNumbers(data) {
      // map studio letters
      const letters = [... new Set(data.map(x => x[0][0]))] 
    
      return "MISSING NUMBERS:\n\n" + letters.map((l) => {
      //filters Fin Year
      const uniqueFinYear = [... new Set(data.filter(x => x[0][0] == l).map(x => x[1]))];
    
        //check sequence of number
        const res = uniqueFinYear.map(x => data.filter(d => d[1] == x).filter(d => d[0] == l))
          .map(x => {
            return x.map(y => y[2]).sort((a, b) => a - b).map((d, i, arr) => d + 1 == arr[i + 1] || d == arr[i + 1])
              .filter((x, i, arr) => arr.length == 1 && x == false ? true : i !== arr.length - 1 && x == false)[0] == false && x
          }).filter(x => x);
    
        return res.map((x) => {
          if (x.length > 0) {
            const newArr = Array.from({ length: Math.max(...x.map(x => x[2])) }, (_, index) => index + 1);
            return `${[... new Set(x.map(x => x[0]))]}: (${[... new Set(x.map(x => x[1]))]}): ${newArr.map(z => [... new Set([... new Set(x.map(x => x[2]).sort((a, b) => a - b))]
              .map(y => y != z && z))].length == 1 && [... new Set([... new Set(x.map(x => x[2]).sort((a, b) => a - b))]
                .map(y => y != z && z))]).flat().filter(d => d).join(',')}  `;
          }
        }).join('');
      }).join(" \n");
    }

在扩展 > Apps 脚本中添加上面的代码。然后在

missingNumbers
单元格中调用函数名称
E2
。这将起到自定义公式的作用。

输出:

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.