Excel组数据,获取模式和总计

时间:2016-08-19 06:08:40

标签: excel vba excel-vba

您好我在excel中有以下数据集。每个产品结束后,总数将在下一行中给出,并且' *"标志将出现在' total'之前。行。

        Product Type    Cost
        A   1   10
        A   1   20
        A   2   10
        A   1   20
    *   A       60
        B   1   30
        B   7   10
        B   7   30
        B   4   50
   *    B       120
        C   3   10
        C   4   50
        C   4   30
        C   4   25
        C   4   20
        C   4   15
        C   3   10
        C   4   5
     *  C       165

我想获得每种产品的每种TYPE的MODE。以及每个产品的总成本。如果它们可以按产品名称列出,那就最好了。

例如,输出应为

A 1 60
B 7 120
C 4 165

我怎样才能做到这一点?使用excel公式或VBA都可以。 请帮忙。 谢谢......

2 个答案:

答案 0 :(得分:0)

假设您提供的源表位于A1:D20(第1行中的标题,并且A列仅包含星号(*)),并且您提供的结果表位于{{ 1}},然后:

F2:H4数组公式**

G2

编辑:根据您的评论,如果 Type 列可能包含非数字:

=MODE(IF(B$2:B$20=F2,{1,1}*C$2:C$20))

=INDEX(C$2:C$20,MODE(IF(B$2:B$20=F2,IF(C$2:C$20<>"",MATCH(C$2:C$20,C$2:C$20,{0,0})))))

H2

根据需要将两者都复制下来。

请注意,如果多个值共享最高频率(即技术上没有单个模态值),那么,在这些值中,将返回找到的第一个值。

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。

答案 1 :(得分:0)

鉴于您的数据“结构”,可能的VBA方法可能如下:

Option Explicit

Sub main()
    Dim cell As Range, firstCell As Range
    Dim iProduct As Long

    With Worksheets("Dataset") '<--| change "Dataset" with your actual worksheet name
        Set firstCell = .Range("A2") '<--| set first cell for the current "Product" range
        For Each cell In .Columns(1).SpecialCells(XlCellType.xlCellTypeConstants).Offset(, 2) '<--| loop through "asterisks" in column "A"
            iProduct = iProduct + 1 '<--| update "Product" counter
            .Range("F1:H1").Offset(iProduct) = Array(cell.Offset(, -1).Value, _
                                                     Application.WorksheetFunction.Mode(Range(firstCell, cell).Value), _
                                                     cell.Offset(, 1).Value)
            Set firstCell = cell.Offset(1) '<--| set first cell for the next "Product" range
        Next cell
    End With
End Sub

我假设: - 数据在“A:D”列中,“A”列中有“星号” - 从第1行向下输出“F:H”