【问题标题】:Index column header where max count of values in columns occurs出现列中值的最大计数的索引列标题
【发布时间】:2015-03-25 16:50:51
【问题描述】:

我有一张九列二十行的表格。我正在尝试确定哪个列标题具有其下方字段的最大计数,其中值大于或等于指定数字。表格范围为 J4:R23。指定编号为 B6。 J4:R4 包含我要匹配的标头。关于获得适当列标题的公式有什么想法吗?谢谢!

【问题讨论】:

    标签: excel-formula


    【解决方案1】:

    这东西勉强适合,当然不是最好的解决方案,但应该可以正常工作:

    =IF(SUMIFS($J$5:$J$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$J$4;
    IF(SUMIFS($K$5:$K$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$K$4;
    IF(SUMIFS($L$5:$L$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$L$4;
    IF(SUMIFS($M$5:$M$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$M$4;
    IF(SUMIFS($N$5:$N$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$N$4;
    IF(SUMIFS($O$5:$O$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$O$4;
    IF(SUMIFS($P$5:$P$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$P$4;
    IF(SUMIFS($Q$5:$Q$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$Q$4;
    IF(SUMIFS($Q$5:$Q$23;">"&$B$6)=MAX(
    SUMIFS($J$5:$J$23;">"&$B$6);
    SUMIFS($K$5:$K$23;">"&$B$6);
    SUMIFS($L$5:$L$23;">"&$B$6);
    SUMIFS($M$5:$M$23;">"&$B$6);
    SUMIFS($N$5:$N$23;">"&$B$6);
    SUMIFS($O$5:$O$23;">"&$B$6);
    SUMIFS($P$5:$P$23;">"&$B$6);
    SUMIFS($Q$5:$Q$23;">"&$B$6);
    SUMIFS($R$5:$R$23;">"&$B$6));$R$4;
    "Error in process"
    )
    )
    )
    )
    )
    )
    )
    )
    )
    

    查看我的attached file(替换和复制可能会损坏公式)。

    【讨论】:

    • 我最初确实考虑过这一点。想知道是否有索引或 maxif 数组来处理这种情况
    • 我建议在 vba 中定义一个函数。顺便问一下,如果有平局怎么办?我的给出了第一列的标题,其中有平局。
    【解决方案2】:

    我也做了一个 VBA 函数,它是多余的等等,但它是:

    Public Function FINDHEADERWHEREMAXCOUNTIFS(Target As Range, Condition As Double)
    Dim rng As Range
    NumCols = Target.Columns.Count 'counts how many header values we can choose of
    Dim Headers() 'defines separate arrays for headers and values (turned out to be obsolete, see variable x)
        ReDim Headers(1 To NumCols)
    Dim ValuesArr()
        ReDim ValuesArr(1 To NumCols)
    
    HeaderRow = Target.Row 'row in which headers are located
    LastRow = HeaderRow + Target.Rows.Count - 1 'last row with values
    FirstColumn = Target.Column 'first column with values
    LastColumn = FirstColumn + Target.Columns.Count - 1 'last column with values
    
    For k = FirstColumn To LastColumn 'for each column
        i = i + 1 'set array position
        Headers(i) = Cells(HeaderRow, k).Value2 'set the corresponding header
        For Each rng In Range(Cells(HeaderRow, k), Cells(LastRow, k)) 'for each value
            If rng.Row <> HeaderRow Then 'I mean value, not header
                If rng.Value2 > Condition Then ValuesArr(i) = ValuesArr(i) + 1 'if it's higher than the condition then count
            End If
        Next
    Next
    
    x = 1 'default is the first header
    For j = 1 To NumCols 'for each header
     If ValuesArr(j) > ValuesArr(x) Then x = j 'if the corresponding value is larger then standard then change the current one to standard
    Next
    FINDHEADERWHEREMAXCOUNTIFS = Headers(x) 'the standard value's corresponding header is the output
    End Function
    

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2015-10-24
      • 2015-06-12
      • 2013-02-03
      • 2012-07-16
      • 1970-01-01
      相关资源
      最近更新 更多