一个工厂业务部门每个员工负责的客户都是手动登记在一张表上,格式如下图1中的表1,如果一个员工对应多个客户,那么使用吨号打开,这种登记方式的优点是看起来比较直观,缺点也非常明显, 数据集中在一个单元格中,如果以后需要,分析和参考客户非常不方便。
本厂统计师的需求是设计一个函数公式,将每个员工对应的客户分开,并统计总客户数(客户有重复数据),最终结果如下图1中的红框所示
图 1 现在要求将 C 列中的客户拆分为独立的元素,并按行(垂直)方向转换为一维表,并根据此一维表对客户的需求进行统计。
为此,首先观察源数据并找到一个关键符号“数字”,该符号可用于创建中继虚拟内存阵列。 第一文本、串联、替代文本、合并文本、列化文本、条件统计;这个要求基本可以完成;
逻辑树如下图 2 所示
图2 文本串联是**中经常使用的一种技术,不需要输入函数,只需要输入“&”符号,这个符号可以称为连接符号或AND符号,它的作用是连接两个元素,成为一个新元素(在一个单元格内);
在单元格 E3 处输入 ="@"&b3:b6&"、",这是一个辅助列,等待它在替换函数中作为内部数组使用,如果你不理解这个辅助列,不用担心,直接输入即可;
图 3 仅查看 C 列中客户数据的模式,很明显,不同的客户之间用逗号分隔。 所以我们需要把这个吨号换成上面的辅助栏,换换的目的是什么呢?相当于将B列员工的信息关联起来,并用符号“@”标记。 录入功能:
f3 =substitute(c3:c6,"、","@"&b3:b6&"、")
g3 =b3:b6&"、"&substitute(c3:c6,"、","@"&b3:b6&"、")
功能定义:通过替换逗号,将B列的数据与C列连接起来,再用符号“&”连接B列的数据,这样可以发现B列和C列的数据是规则的,即用符号“@”分隔客户。
完成后,如下图4所示
图4使用了上面的三个辅助列,目的是在合并时有一个规则,用规则重新划分列就好了,将G3输入的辅助列数据重新合并到一个单元格中,用符号“@”进行合并,进入函数:
e3 =textjoin("@",,b3:b6&"、"&substitute(c3:c6,"、","@"&b3:b6&"、"))
合并完成后,如下图5所示
图 5 再次将单元格中的数据进行划分,使用的函数是 textsplit,函数输入到函数中:
e3=textsplit(textjoin("@",,b3:b6&"、"&substitute(c3:c6,"、","@"&b3:b6&"、")),"、","@")
函数解释:将合并后的数据分为行符号“@”和列符号“,”即柱子和柱子同时分离,效果如下图6所示
图 6 通过上述步骤将标准 2D 合并数据转换为标准 1D 数据。 计算客户数量并不难。 录入功能:
e3=rows(unique(take(e3#
函数定义:先用take函数为e3保留最后1列,参数为-1,即客户列,然后删除该列中的重复项,结果按行判断,行数为客户数;
完成的效果如下图7所示
图7