首页 > 解决方案 > Excel VBA - 自定义 SUMIF 函数

问题描述

我有如下数据。第一列有标签和数字的组合,第二列有值

例如

第一行:AB值为10

第二行:在值 20 中,AB 为 10%,PQ 为 90%

在此处输入图像描述

由于这些标签是为分类自定义定义的,因此可以假设每个字母和数字后跟 2 个字符,除非百分比为 100%,字母后面不会有任何数字(例如第一行 - AB)

如果我们分离标签及其值,它将如下所示

在此处输入图像描述

我想,实现这一点需要一个增强/定制的 SUMIF 函数。希望有人能给出一些想法

到目前为止尝试了什么:

  1. 我尝试分多个步骤执行这些步骤,将标记分解为列-> 我成功了,但无法弄清楚如何将因子相乘并得到总和。这种做法使得将公式移植到其他工作表变得困难。需要创建额外的列等。因此放弃该计划

  2. 考虑创建一个 VBA 脚本来增强 SUMIF 功能。购买这样做我可以将 VBA 代码复制到其他工作表并使用我的自定义函数。如果需要,该功能可以进一步增强。为了获得有关此计划的一些想法,我发布了这个问题

谢谢

标签: excelvba

解决方案


我将分两步执行此操作,以使其更易于理解。第一步:按每个关键字分离出百分比因子。在数据右侧设置一个表格。 在此处输入图像描述

第一行是您要为其创建总和的所有代码。在它下面是每个数据行的各种所需百分比。我们将在 A 列中的内容中查找第 1 行中的内容。如果找不到,则元素百分比为零,如果找到但后面没有数字,则百分比为 100,否则使用后面的 2 位数字。这是E2中的公式:

=IF(ISERROR(FIND(E$1,$A2)),0,IFERROR(值(MID($A2,FIND(E$1,$A2)+LEN(E$1),2)),100))

第一部分说如果您在 $A2 中找不到 E$1,则使用零因子。其余的说在你找到 E$1 点之后拿起两位数,但如果失败,使用 100。

将公式复制到所有单元格后,您可以看到上述因素。其余的很容易。将上述公式合并到一个求和范围中,乘以 B 列中的值并除以 100。

={SUM(IF(ISERROR(FIND(E$1,$A3:$A7)),0,IFERROR(VALUE(MID($A3:$A7,FIND(E$1,$A3:$A7)+LEN(E$1),2)),100))*$B3:$B7/100)}

不要忘记使用 Ctrl-Shift-Enter 终止此数组公式。我得到以下结果: 在此处输入图像描述


推荐阅读