【问题标题】:VBA code required to loop through different sized rows of data and return MAX value循环遍历不同大小的数据行并返回 MAX 值所需的 VBA 代码
【发布时间】:2018-11-13 12:24:10
【问题描述】:

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

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

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

非常感谢,

哈利

【问题讨论】:

  • 你能告诉我们你到目前为止写的代码吗...
  • 注意Application.WorksheetFunction.Max()rondebruin.nl/win/s9/win005.htm
  • @rohrl77 我还没有写任何代码,因为我不知道从哪里开始,因为我不熟悉循环
  • 我想出了一个解决方案。谢谢大家的时间。

标签: excel vba loops max


【解决方案1】:

如果我理解正确,您正在寻找Column G 中的最大值。

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


获取一列的最大值

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

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

=MAX(G:G)

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


查找值的位置

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

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

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

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


至于问题的第三部分:返回值存在的X12345 之类的代码会有点棘手,因为您的数据没有按逻辑表格 样式组织(tabular 意思是,“像一张桌子”)。

您的数据是供人类查看的,而不是供机器轻松读取和操作的。 (请参阅:Office 支持:Guidelines for organizing and formatting data on a worksheet

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

我的快速修复建议:

  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 G 的最大值所在的同一行中返回来自Column C 的值。

这称为INDEX/MATCH 公式。

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

【讨论】:

  • 如果出于某种原因您确实需要为此使用 VBA 而不是工作表函数,您可以使用 Application.WorksheetFunction 从 VBA 调用工作表函数。
  • 您好 Ashleedawg,感谢您的快速回复。我在 VBA 中需要它的原因是因为它进入了我的 VBA 代码,该代码自动从驱动器中提取数据,然后创建一个带有仪表板数据的工作表,该工作表已通过使用投资组合代码填充了各种数据源。至于更合乎逻辑地组织我的数据,这是我无法控制的,因为这是数据所在的格式。如果我要更改它,不幸的是它会相对手动,这会破坏自动化的意义。
  • 我知道如何在 excel 中手动执行该过程,但由于我需要它自动化,我正在寻找一种在 VBA 中执行此操作的方法。主要的症结在于处理困难的数据布局,因此我在这里发布。希望能澄清事情。谢谢
  • 我还需要每个单独投资组合的 g 列中的最大值,而不仅仅是整个列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多