在Excel的VBA中重复提取数组的最大值

时间:2018-01-09 19:55:36

标签: excel vba max repeat

我有一个表格,其中包含如图所示的重复索引:

我希望每个索引获得时间1 /时间2的最高值(" Apple"," Banana",...)

我的代码如下:

dim i as integer, j as integer
For i=2 to 4
      j=2
      While Cells(i,6)=Cells(j,2)
          if Cells(j,3) > Cells(i,7) then
              Cells(i,7) = Cells(j,3)
          end if 
          if Cells(j,4) > Cells(i,8) then
              Cells(i,8) = Cells(j,4)
          end if
       Wend
Next i

所以我的想法是遍历唯一的名称,然后浏览每个名称,并检查它是否比当前存储的时间更大。

我知道有一些语法错误,因为每当我运行代码时它都不会改变我的工作表,我无法找到有关如何替换VBA中的值的文档。

所以我想知道是否有更简单的方法可以做到这一点,和/或寻求帮助以获得正确的语法。

2 个答案:

答案 0 :(得分:1)

这可以在没有VBA的情况下完全完成。使用您的样本数据,在单元格J1中,我使用此公式来获取B列中唯一名称的数量:

=SUMPRODUCT((B2:B10<>"")/COUNTIF(B2:B10,B2:B10&""))

在单元格F2中并向下复制到F6是此公式以提取这些唯一名称:

=IF(ROW(F1)>$J$1,"",INDEX($B$2:$B$10,MATCH(0,INDEX(COUNTIF(F$1:F1,$B$2:$B$10),),0)))

在单元格G2中,上下复制到H6是这个公式,用于为每个唯一名称提取最大时间值:

=IF($F2="","",MAX(INDEX(($B$2:$B$10=$F2)*C$2:C$10,)))

右侧(F,G和H列)填充的表格是结果:

enter image description here

或者,可以使用数据透视表轻松完成此操作。在B,C和D列中选择原始数据,然后转到插入 - &gt;数据透视表。我选择将它放在同一个工作表上,但如果愿意,你可以把它放在一个新的工作表上。然后会出现询问您的数据透视表字段,将其设置为如图所示(请注意,您需要将值从Count更改为Max):

enter image description here

然后您将拥有一个显示相同结果的数据透视表:

enter image description here

答案 1 :(得分:0)

1.-你声明“j = 2”但是从不改变它,我认为你必须通过2到10行“navegate”,不是吗?

2.-当你输入“while”语句时,你永远不会改变条件......它会永远重复

我不确定你必须获得什么,所以请公开一个样本

+++++您必须从表中删除“ - ”值

dim i as integer, j as integer
For i=2 to 4
    For j=2 to 10
        if Cells(i,6)=Cells(j,2) then
            if Cells(j,3) > Cells(i,7) then
                Cells(i,7) = Cells(j,3)
            end if 
            if Cells(j,4) > Cells(i,8) then
                Cells(i,8) = Cells(j,4)
            end if
        end if
    Next j
Next i

+++++您必须从表中删除“ - ”值