是否可以在不知道目标范围的情况下执行此SumIf?

时间:2017-01-17 06:58:41

标签: excel vba excel-vba excel-formula excel-2010

到目前为止,这是我的代码,请参阅此question,了解我要做的事情。

 =SUM(IF(LEFT(C$2,4)="/111",SUM(C3,G3)))

正如你所看到的,我正在定义C2,我的标题点,在Sum中,我定义了总和范围。我现在有这个问题:

  • 如果我不知道我的标题究竟在哪里,我该怎么办? 知道我正在寻找一个'部分'标题。我该如何搜索 这个?有了一个HLookUp?这是因为这些标题可以放在几乎任何顺序中,因此,我需要搜索文本而不是定义它的位置。

例如,我有这张表:

    +-------------+-------------+-------------+-------------+-------------+
    |      A      |      B      |      C      |      D      |      E      |
+---+-------------+-------------+-------------+-------------+-------------+
| 1 |/650 - Black |/670 - White |/800 - White |/680 - Red   |/650 - Black |
+---+-------------+-------------+-------------+-------------+-------------+
| 2 |     250     |     400     |     100     |     300     |     125     |
+---+-------------+-------------+-------------+-------------+-------------+

我想总结一下我指定4个字符LEFT限制标题的数据行,就像我发布的代码一样。这里的问题是代码更像是一个" This.Cell,如果它是你想要的标题,添加东西"当我想要一些更像是" Where.Cell匹配LEFT限制标题时,添加他们的东西(水平通过其他匹配,而不是垂直)我认为索引匹配是我正在寻找的,但是从我收集的内容,数据必须在一个单元格上定义,根据上表,它不包含它。

我创建了一个单独的问题,因为我认为第一次没有正确说明要求,导致不同的方向和不同的答案。

纯粹的配方是首选,但如果VBA是您已经想到的,我仍然希望阅读它。

TLDR:在excel中,我定义了几个左边有限的标题,左边是有限的,因为经过/和四位数,文本的其余部分可能不同。我在工作表中搜索这些标题,一旦找到,我将它们总结并将它们放在这个公式的位置。

我希望这次我能够更清楚地澄清我的要求!

编辑:

所以我只想重申,这个公式的要求是我不知道哪里我的标题所在,尽管我上面写的表。我的想法是,我将始终拥有/ 650,a / 670或a / 680。数字安排在这一点上并不重要。我根本不知道这是否可行,因为我不知道标题在哪里,只知道它们是什么,我不知道单元格会在哪个字母上,只是它是找到标题的"单元格"。

说我想要/ 670和/ 680。公式首先找到标题/ 670,并获得其像#34; / 670在C1上的单元格空间!因此,必须添加的数字是C2!"。继续下一步,/ 680并做同样的事情。最后,我点击了公式,输出了这两个标题= 700的总和。

我正在思考C#代码,我可能会说要添加的范围是基于我找到的标题的字母,不知道excel是否可以做得那么少,作为一个可拖动的公式,这就是我发布这个问题的原因。

2 个答案:

答案 0 :(得分:2)

根据您的示例表和您的说明,这是SUMPRODUCT的用途。数组的和积。这里第一个数组是一个0或1的数组,其中1表示如果标题匹配所需的标题之一0,如果不匹配。第二个数组是要求和的值数组。

所以:

=SUMPRODUCT((LEFT($A$1:$E$1,4)={"/670";"/650";"/680"})*$A$2:$E$2)

将导致1075 = 250 + 400 + 300 + 125。

也可以在单元格范围内给出所需的标题。但这必须是列范围(1列,多行)。例如,如下所示

    G
1 /650
2 /670
3 /680

然后:

=SUMPRODUCT((LEFT($A$1:$E$1,4)=$G$1:$G$3)*$A$2:$E$2)

答案 1 :(得分:1)

我假设,您正在寻找的是一个数组公式,几乎与您已使用的公式相同:

{=SUM(IF(LEFT(A1:A3,4)="/670",B1:B3),IF(LEFT(A1:A3,4)="/680",B1:B3))}

点击CTRL + SHIFT + ENTER