0

假设以下 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

这个查找应该是动态的,所以如果第十个 Item 是BARBAZ|sdadadsd|34343324322,那么返回应该是:

FOO
BAR
BAZ
FOOBAR
BARBAZ

(2) 我需要统计每个项目类型的BC列。所以原始示例的总输出将是(为清楚起见,括号内的计算)

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列,如果有,我可以手动更新公式。问题是我很难开始这样做。可以用公式完成还是需要VBA?

在@KazJaws 发表评论后,我决定尝试编写 VBA。我现在有这个,但我需要扩展。任何帮助将不胜感激:

Sub CreateStats()
    Dim itemSplit
    Dim item
    itemSplit = Split(Columns(0).Value, "|")
    item = itemSplit(1)
End Sub

但是,它会产生一个错误:“无法在中断模式下执行代码”

4

1 回答 1

1

使用文本到列通过“|”拆分列 A 然后使用从可以在此处找到的列表公式中提取的不同列表。

然后使用一个SUMIFS()公式,其中总和范围是 In Progress 列,它的标准范围是 Item 列,标准是您创建的不同列表中的第一项。然后只需为 Completed 值添加另一列。

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)

应该是这个样子 在此处输入图像描述

于 2013-07-16T11:55:05.810 回答