excel - 循环遍历不同大小的数据行并返回 MAX 值所需的 VBA 代码
问题描述
我目前正在自动创建仪表板,但遇到了一些障碍。我需要一些代码来处理大约 7000 行数据,并为每个特定项目返回特定列中的最大值。数据是从数据透视表复制的,因此被分解为行部分,我附上了一个模拟它的样子。
对于每个投资组合,我需要 G 列中的最高值,并且需要使用投资组合代码(例如 XY12345 - 它们总是 7 个字符)将该值映射到仪表板。
我的问题是,每个投资组合的值的行数都不同,有些在它们之间有空白单元格,因此我很难过。我希望使用 J 列来计算每个投资组合的行数(因为此列中的投资组合没有中断),然后根据 J 列计数,使用循环遍历每个投资组合的值行,然后返回每个投资组合的最高行值。问题是我是 VBA 的新手,并且一直在自学,但我还没有使用循环。
非常感谢,
哈利
解决方案
如果我理解正确,您正在寻找Column G
.
我不确定你为什么认为你需要 VBA。
获取一列的最大值
您提到您担心每列没有相同数量的单元格,但这无关紧要。因为SUM
忽略空白单元格,所以只需“做多”,或者 - 找到整个列的最大值。
要返回最大的数字,
Column G
您可以使用工作表公式:
=MAX(G:G)
唯一的问题是您不能将该公式放在 G 列的任何位置,否则它会创建一个循环单元格引用(尝试无限地向自身添加一个数字)。现在让我们在单元格中使用该公式F1
(但除列之外的任何地方G
都可以)。
查找值的位置
现在您知道了最大值,您可以使用查找函数(例如或)来确定它的位置。就像 Excel 中的许多事情一样,有几种方法可以完成同样的事情。我会去的。MATCH
VLOOKUP
MATCH
将上面 (in F1
) 中的公式替换为:
=MATCH(MAX(G:G),G:G,0)
这将返回最大值的第一个完全匹配的行号。Column G
至于问题的第三部分:返回X12345
值所在位置的代码会有点棘手,因为您的数据不是以逻辑表格样式组织的(表格的意思是“像表格”)。
您的数据被组织起来供人类查看,而不是让机器轻松读取和操作它。(请参阅:Office 支持:在工作表上组织和格式化数据的指南)
基本上,在按行组织数据时,所有相关信息都应该在同一行上(而不是后面的主观行数)。此外,您将号码与其他信息结合在一起。
我的快速修复建议:
- 右键单击标题
Column C
并选择Insert
插入空白列。 - 在
C2
输入公式中:=IF(B2="",C1,LEFT(B2,7))
- 复制单元格
C2
- 选择 C 列中的单元格一直到数据的“末尾”,无论是在哪里(不是工作表的末尾)。例如,也许您会选择单元格
B2:B1000
) - 将复制的单元格粘贴到所有这些单元格中。
现在,您可以再次修改公式F1
:
=INDEX(C:C,MATCH(MAX(G:G),G:G,0))
这将返回最大值Column C
所在的同一行中的值Column G
。
这被称为INDEX/MATCH
公式。
希望这在过渡期间对您有用,直到您可以更合理地组织数据。网上有很多相关的资料和教程。
推荐阅读
- javascript - Appscript onEdit 获取行号并发送电子邮件
- spring - AWS ALB - 安全 Web 套接字 + Spring Boot
- asp.net - IIS - 如何将域名屏蔽到另一个域中的特定页面
- bluetooth-lowenergy - BLE STM BlueNrg 特征最大尺寸和每个服务的最大特征
- javascript - Javascript点击位置关闭
- java - 关于并发访问完成时原子布尔值的奇怪行为的问题
- ios - 使用 AR Foundation 检测图像中的人脸
- mysql-workbench - mysql新用户访问数据库被拒绝
- javascript - IE11 不能使用 import * as XXX from XXX
- druid - 如何在apache druid的摄取规范中获取具有最大时间戳的最后一个值?