我有以下数据
Person Week1
P1 L,L
P2 M,H
我想要的输出是
Person Week1
L M H
P1 2 0 0
P2 0 1 1
我的目的是根据输出创建一个图表,这样我就可以计算出每周有多少代码。数据透视表似乎不适用于这种情况。
由于
答案 0 :(得分:1)
这是一种纯粹的公式方法。
它基于两个基本公式。第一个公式是如何计算字符串A在字符串B中出现的次数。这样做,通过计算字符串B中的字符数,然后通过计算字符串B中的字符数来替换字符串A什么都没有或""。如果字符串A长度超过1个字符,则需要将结果除以字符串A的长度。这给出了以下公式:
=(LEN(STRING B)-LEN(SUBSTITUTE(STRING B, STRING A, "")))/LEN(STRING A)
现在我们知道如何计算L,M或H出现的次数,因为它们是字符串A,现在我们需要确定字符串B.
如果我们查看第一个表,它有很好的行标题和列听众。我们可以采取捷径,只是假设一切都是有序的,但是如果标题碰巧是随机顺序的话,我将采用更通用的方法。
基本上我们需要找出第一个表中的哪个列与第二个表中的标题匹配。即第二周真的是第二列吗? P1仍然是第一排吗?为此,我们使用以下
=MATCH("WEEK X",$B$1:$D$1,0)
and
=MATCH("PX",$A$2:$A$3,0)
那些将返回一个整数,然后我们可以将其放入INDEX函数中以查找并找到第一个表中的文本:
=INDEX($B$2:$D$3,MATCH("PX",$A$2:$A$3,0),MATCH("WEEK X",$B$1:$D$1,0))
太棒了我们现在知道如何从表格中找到文本,并将其放入我们开始使用的计数公式中。只要有STRING B,那个las公式就会被替换掉!
=(LEN(INDEX($B$2:$D$3,MATCH("PX",$A$2:$A$3,0),MATCH("WEEK X",$B$1:$D$1,0)))-LEN(SUBSTITUTE(INDEX($B$2:$D$3,MATCH("PX",$A$2:$A$3,0),MATCH("WEEK X",$B$1:$D$1,0)), STRING A, "")))/LEN(STRING A)
是的,它变得有点丑陋了!字符串A是第二个表中L所在的单元格。替换"第X周"在第二个表中使用您的星期标题。替换" PX"在你的第二张桌子上写下你的人的名字。
我会做第一个公式,然后在M下和H下复制它。进入M和H公式并调整它,使其指向每个中的右侧标题。锁定行但不包括周标题和字符串A单元格的列引用。锁定列,但不锁定人员名称的行。一旦你有了这个设置,复制三个公式并在每周下粘贴。然后只需将你的第二排第二行复制到你所拥有的人数中即可!
概念证明
我分别在细胞H3,I3和K3中使用的公式
=(LEN(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)))-LEN(SUBSTITUTE(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)),H$2,"")))/LEN(H$2)
=(LEN(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)))-LEN(SUBSTITUTE(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)),I$2,"")))/LEN(I$2)
=(LEN(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)))-LEN(SUBSTITUTE(INDEX($B$2:$D$3,MATCH($G3,$A$2:$A$3,0),MATCH(H$1,$B$1:$D$1,0)),J$2,"")))/LEN(J$2)
这是另一个概念验证,扩展范围显示乱序的行,以及要搜索的多个字母字符串和两个以上的条目。相同的公式,只需调整增加的表大小的查找范围。
答案 1 :(得分:0)
如果可以接受使用VBA,则使用TextToColumns拆分逗号分隔数据应该有助于作为第一个处理步骤。
然后使用数据透视表为您提供所需的输出。