如何根据值的和来找到数据的最大'n'值?

时间:2013-09-20 11:34:28

标签: excel vba excel-vba excel-2007

下面是表格

  

Amt | Val |位置
  230 | a | DEL
  450 | b | KOL
  670 | c | BLR
  890 | d | DEL
  111 | e | KOL
  133 | a | KOL
  155 | b | DEL
  177 | c | BLR
  199 | a | DEL
  221 | b | BLR
  243 | c | BLR
  265 | d | KOL
  287 | a | KOL
  309 | b | DEL
  331 | c | DEL
  353 | d | KOL
  375 | e | BLR
  397 | a | BLR
  419 | b | DEL
  441 | c | KOL

中的a,b,c,d,e值如何根据a's..b的...的...的数量找到各个位置的最大2个值。
对于一个位置,我能够通过数据透视表获得前2个 val 的值的总和 请告诉我们如何通过VBA同时获得所有位置金额的最高2 val

我已经发布了相同的VBA代码,只给出了一个位置的结果。

抱歉无法上传快照。

3 个答案:

答案 0 :(得分:1)

假设您的数据位于A1至C20。您有三个独特的位置:DEL,KOL,BLR。

在D1中输入:

= SUMPRODUCT( - (1澳元:20澳元)*(C $ 1:C $ 20 = C1))并通过D3复制

在E1中输入:

<强> = LARGE(D1:D3,1)

在E2中输入:

<强> = LARGE(D1:D 3,2)

应该是这样的:

enter image description here

编辑:

根据您的评论,DEL的最高两个值为:

<强> = LARGE(IF(C1:C20 =&#34;删除&#34;,A1:A20),1)

<强> = LARGE(IF(C1:C20 =&#34;删除&#34;,A1:A20),2)

这些是必须使用 CNTRL-SHFT-ENTER 输入的数组公式,而不仅仅是 ENTER

答案 1 :(得分:0)

DMAX 函数根据给定条件返回列表或数据库中列中的最大数字。

http://www.techonthenet.com/excel/formulas/dmax.php

答案 2 :(得分:0)

   1. Insert a Pivot Table.
   2. Add Val in Row Labels.
   3.  Add Location in column Labels.
   4.  Add Amt in Values field(Sumof Amt).

    Now In created Pivot Table,  

   1.  In column labels filter for only one location(eg: Blr).
   2.  In Row Labels filter apply value filters and select Top 10..(last item).
   3.  In place of 10(by default) give 2.

   4.  Now the table consists of Top 2 val with their sum of Amount for BLR Location.

相同的VBA代码:

    Private Sub CommandButton1_Click()
    Dim wkbk As Workbook
    Set wkbk = ActiveWorkbook

    With wkbk.Sheets(1)
    LastRow = .Range("A1").End(xlDown).Row
    LastCol = .Range("A1").End(xlToRight).Column
    Set rngSource = .Range("A1", .Cells(LastRow, LastCol))

    End With

       With wkbk.Sheets(2)
       Set dst = .Range("a1")
       End With  With wkbk
    Sheets(1).PivotTableWizard _
    SourceType:=xlDatabase, _
    SourceData:=rngSource, _
    TableDestination:=dst, _
    TableName:="Pivotinfo"
    End With

    With wkbk.Sheets(2).PivotTables("Pivotinfo")
        .PivotFields("Val").Orientation = xlRowField
        .PivotFields("Location").Orientation = xlColumnField



            With .PivotFields("Amt")
            .Orientation = xlDataField
            .Function = xlSum  With wkbk.Sheets(2).PivotTables("Pivotinfo").PivotFields("Location")
    .PivotItems("DEL").Visible = False
    .PivotItems("KOL").Visible = False
    End With

    With wkbk.sheets(2).PivotTables("Pivotinfo").PivotFields("Val").AutoShow _
    xlAutomatic, xlTop, 2, "Sum of Amt"
    End With
    End With
    End With
    End Sub