excel - Excel VBA - 自定义 SUMIF 函数
问题描述
我有如下数据。第一列有标签和数字的组合,第二列有值
例如
第一行:AB值为10
第二行:在值 20 中,AB 为 10%,PQ 为 90%
由于这些标签是为分类自定义定义的,因此可以假设每个字母和数字后跟 2 个字符,除非百分比为 100%,字母后面不会有任何数字(例如第一行 - AB)
如果我们分离标签及其值,它将如下所示
我想,实现这一点需要一个增强/定制的 SUMIF 函数。希望有人能给出一些想法
到目前为止尝试了什么:
我尝试分多个步骤执行这些步骤,将标记分解为列-> 我成功了,但无法弄清楚如何将因子相乘并得到总和。这种做法使得将公式移植到其他工作表变得困难。需要创建额外的列等。因此放弃该计划
考虑创建一个 VBA 脚本来增强 SUMIF 功能。购买这样做我可以将 VBA 代码复制到其他工作表并使用我的自定义函数。如果需要,该功能可以进一步增强。为了获得有关此计划的一些想法,我发布了这个问题
谢谢
解决方案
我将分两步执行此操作,以使其更易于理解。第一步:按每个关键字分离出百分比因子。在数据右侧设置一个表格。
第一行是您要为其创建总和的所有代码。在它下面是每个数据行的各种所需百分比。我们将在 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)}
推荐阅读
- php - 如何在 php 错误处添加 Jquery slideDown 警报
- python - 为什么在数据帧上带有中位数的 fillna 仍然在熊猫中留下 Na/NaN?
- python - 在 Spyder 中看不到由 PySide2 创建的应用程序窗口
- c# - C# 使用 Async 和 Await,返回类型错误
- python - 加入字符串时,Pandas 合并结果缺少行
- python - 使用 python-3.x 从 zip 存档中读取 CSV 文件
- javascript - 错误 TS2554,预期参数 2 但得到 1
- apache-spark - SPARK_SUBMIT_OPTIONS 中的 CPS 是什么?
- python - 导入 discord.py 导致的 TypeError
- c - 无法将数组中的数字更改为我想要的数字