首页 > 解决方案 > 循环遍历不同大小的数据行并返回 MAX 值所需的 VBA 代码

问题描述

我目前正在自动创建仪表板,但遇到了一些障碍。我需要一些代码来处理大约 7000 行数据,并为每个特定项目返回特定列中的最大值。数据是从数据透视表复制的,因此被分解为行部分,我附上了一个模拟它的样子。

在此处输入图像描述

对于每个投资组合,我需要 G 列中的最高值,并且需要使用投资组合代码(例如 XY12345 - 它们总是 7 个字符)将该值映射到仪表板。

我的问题是,每个投资组合的值的行数都不同,有些在它们之间有空白单元格,因此我很难过。我希望使用 J 列来计算每个投资组合的行数(因为此列中的投资组合没有中断),然后根据 J 列计数,使用循环遍历每个投资组合的值行,然后返回每个投资组合的最高行值。问题是我是 VBA 的新手,并且一直在自学,但我还没有使用循环。

非常感谢,

哈利

标签: excelvbaloopsmax

解决方案


如果我理解正确,您正在寻找Column G.

我不确定你为什么认为你需要 VBA。


获取一列的最大值

您提到您担心每列没有相同数量的单元格,但这无关紧要。因为SUM忽略空白单元格,所以只需“做多”,或者 - 找到整个列的最大值。

要返回最大的数字,Column G您可以使用工作表公式:

=MAX(G:G)

唯一的问题是您不能将该公式放在 G 列的任何位置,否则它会创建一个循环单元格引用(尝试无限地向自身添加一个数字)。现在让我们在单元格中使用该公式F1(但除列之外的任何地方G都可以)。


查找值的位置

现在您知道了最大值,您可以使用查找函数(例如或)来确定它的位置。就像 Excel 中的许多事情一样,有几种方法可以完成同样的事情。我会去的。MATCHVLOOKUPMATCH

将上面 (in F1) 中的公式替换为:

=MATCH(MAX(G:G),G:G,0)

这将返回最大值的第一个完全匹配的行号Column G


至于问题的第三部分:返回X12345值所在位置的代码会有点棘手,因为您的数据不是以逻辑表格样式组织的(表格的意思是“像表格”)。

您的数据被组织起来供人类查看,而不是让机器轻松读取和操作它。(请参阅:Office 支持:在工作表上组织和格式化数据的指南

基本上,在按行组织数据时,所有相关信息都应该在同一行上(而不是后面的主观行数)。此外,您将号码与其他信息结合在一起。

我的快速修复建议:

  1. 右键单击标题Column C并选择Insert插入空白列。
  2. C2输入公式中:=IF(B2="",C1,LEFT(B2,7))
  3. 复制单元格C2
  4. 选择 C ​​列中的单元格一直到数据的“末尾”,无论是在哪里(不是工作表的末尾)。例如,也许您会选择单元格B2:B1000
  5. 将复制的单元格粘贴到所有这些单元格中。

现在,您可以再次修改公式F1

=INDEX(C:C,MATCH(MAX(G:G),G:G,0))

这将返回最大值Column C所在的同一行中的值Column G

这被称为INDEX/MATCH公式。

希望这在过渡期间对您有用,直到您可以更合理地组织数据。网上有很多相关的资料和教程。


推荐阅读