假设以下Excel工作表:
A B C
1 Item In progress Completed
2 FOO|01|442532342|fdsfdsfsd4 15 5
3 BAR|05|534527777|gfdsfdsfsd 10 5
4 BAR|9633|fdfssdfdsfdsf|5444 20 10
5 BAR|4543|fgfddsfds|34324325 5 0
6 FOO|efdfs|fdsfs|42321321323 5 5
7 BAZ|eree|34533432432|gfffdd 30 20
8 FOOBAR|fdfsdfs|432432|gdfgf 35 5
9 FOOBAR|sdfs534324324|43|223 0 0
(1)我想扫描A
列,并根据第一个管道(|
)之前的文本识别唯一的项目。在这种情况下,这将是:
FOO
BAR
BAZ
FOOBAR
此查找应该是动态的,因此如果第十项是BARBAZ|sdadadsd|34343324322
,那么返回应为:
FOO
BAR
BAZ
FOOBAR
BARBAZ
(2)我需要为每个Item类型计算B
和C
列。因此,原始示例的总输出将是(为清晰起见,括号内的计算)
FOO 20 (15+5) 10 (5+5)
BAR 35 (10+20+5) 15 (5+10+0)
BAZ 30 (30) 20 (20)
FOOBAR 35 (35+0) 5 (5+0)
B
和C
列是硬编码的说法:不会有D
列包含其他值,如果有,我可以手动更新te公式。事情是我很难开始这个。可以用公式来完成,还是需要VBA?
在@KazJaws评论之后,我决定尝试编写VBA。我现在有这个,但我需要扩大。任何帮助将不胜感激:
Sub CreateStats()
Dim itemSplit
Dim item
itemSplit = Split(Columns(0).Value, "|")
item = itemSplit(1)
End Sub
但它会生成错误:“无法在中断模式下执行代码”
答案 0 :(得分:1)
使用文本到列以“|”拆分列A.然后use an extract distinct list from a list formula that can be found here.
然后使用SUMIFS()
公式,其总和范围是“进行中”列,其条件范围是“项目列”,条件是您创建的不同列表中的第一个项目。
然后只需为“已完成”值添加另一列。
Cell H3 =INDEX($B$3:$B$10,MATCH(0,INDEX(COUNTIF($H$2:H2,$B$3:$B$10),0,0),0))`
Cell I3 =SUMIFS($F$3:$F$10,$B$3:$B$10,H3)
Cell J3 =SUMIFS($G$3:$G$10,$B$3:$B$10,H3)
应该是这样的,