如何在 A1、B1、C1 和 D1(分别)处使用数组公式来提供所需的输出列,如图所示。
注意: “主标题”(亲戚、朋友、商业朋友)和“姓名”之间的区别在于“主标题”在开始和结束处有 1 个空格字母。
A、B、C 列三者相同,唯一的区别在于“主标题”A 列提供字母,B 列提供数字,C 列提供罗马数字。
序列编号条件:
(1)序列编号完全基于列:NAMES 和 PAX。
(2)如果 PAX 为 0,则输出为空白。
对于 A、B、C 列:
当 PAX 为空白时:
-> 如果它是“主标题”,则输出为字母 OR
-> 如果它是“名称”,则输出为空白。
对于 D 列:
当 PAX 为空白时:
-> 如果它是“主标题”,则输出为空白 OR
-> 如果它是“名称”,则输出为序列号,直到下一个“主标题”,然后再次从 1 重新开始,直到下一个“主标题”等等。
编辑:
列名称和 PAX 是输入,其余的是所需的输出。
数据:
一个 | B | 碳 | D | 姓名 | PAX |
---|---|---|---|---|---|
一个 | 1 | 我 | 亲属 | ||
1 | 1 | 1 | 1 | 尼廷 | 2 |
2 | 2 | 2 | 2 | 阿米特·纳瓦尔 | 1 |
3 | 3 | 3 | 3 | 古尔扎里 | 2 |
4 | 4 | 4 | 4 | 尼拉杰 | 2 |
温达斯瓦斯尼 | 0 | ||||
毗湿奴 | |||||
图尔西 | 0 | ||||
5 | 5 | 5 | 5 | 纳纳拉扬 | 3 |
6 | 6 | 6 | 6 | 卡尔佩什 | 2 |
B | 2 | 二 | 朋友们 | ||
7 | 7 | 7 | 1 | 马诺伊 | 2 |
8 | 8 | 8 | 2 | 普拉尚特 | 2 |
9 | 9 | 9 | 3 | 阿洛克 | 1 |
苏希尔吉 | 0 | ||||
10 | 10 | 10 | 4 | 迪帕克 | 2 |
安库尔 | |||||
什拉达南德 | 0 | ||||
11 | 11 | 11 | 5 | RC学院 | 十三 |
碳 | 3 | 三 | 商业朋友 | ||
12 | 12 | 12 | 1 | 帕万 | 2 |
十三 | 十三 | 十三 | 2 | Pinky | 2 |
14 | 14 | 14 | 3 | 阿希什 | 2 |
巴维亚 |
A2 中的这个公式为所有列生成结果。
工作原理
首先,我们对标题进行运行计数并将其存储在
header_count
:此公式返回一个包含多行的
ROWS(names)
数组,其中每行是迄今为止遇到的标题的数量。标题是“名称”列中以空格结尾的任意值" "
。然后,我们根据OP中提到的条件(即name不为空且pax不为0)进行编号并赋值给
serial_numbering
:然后,我们检查“名称”中的每个值。
如果是标题,我们将根据当前情况返回标题(字母、数字、罗马数字)
header_count
:如果它不是标题,并且 pax 不为 0(或空白*),则我们返回:
在哪里
是简写
和
等于当前序列号减去与当前报头关联的序列号。每次遇到新的报头时,都需要进行减法运算,以便重置序列号。
* 因为类型强制
value = 0
等同于OR(value = 0, ISBLANK(value))
对于列
A:C
,使用reduce()
和map()
,如下所示:请参阅 let()、 lambda()、 map()、 vstack()、 hstack()、 chooserows()、 choosecols()、 iferror()、 sequence()、 reduce() 和示例电子表格。