创建表格拆分逗号并查找唯一元素

时间:2016-06-01 05:57:11

标签: excel

我有以下数据

Person     Week1
P1         L,L
P2         M,H

我想要的输出是

Person      Week1
           L   M   H
P1         2   0   0
P2         0   1   1

我的目的是根据输出创建一个图表,这样我就可以计算出每周有多少代码。数据透视表似乎不适用于这种情况。

由于

2 个答案:

答案 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单元格的列引用。锁定列,但不锁定人员名称的行。一旦你有了这个设置,复制三个公式并在每周下粘贴。然后只需将你的第二排第二行复制到你所拥有的人数中即可!

概念证明

Proof of concept

我分别在细胞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)

这是另一个概念验证,扩展范围显示乱序的行,以及要搜索的多个字母字符串和两个以上的条目。相同的公式,只需调整增加的表大小的查找范围。

Proof of concept 2

答案 1 :(得分:0)

如果可以接受使用VBA,则使用TextToColumns拆分逗号分隔数据应该有助于作为第一个处理步骤。

然后使用数据透视表为您提供所需的输出。