如何根据字符串开头计算Excel

时间:2013-07-16 10:03:03

标签: excel excel-vba excel-formula vba

假设以下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类型计算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)

BC列是硬编码的说法:不会有D列包含其他值,如果有,我可以手动更新te公式。事情是我很难开始这个。可以用公式来完成,还是需要VBA?

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

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

但它会生成错误:“无法在中断模式下执行代码”

1 个答案:

答案 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)

应该是这样的, enter image description here