用于比较和验证值的电子表格/ Excel数组函数

时间:2014-10-05 12:25:08

标签: excel-formula google-sheets

我有这个数据集

ID  fruit   price
1   apple   10
2   apple   50
3   apple   100
4   banana  10
5   banana  20
6   banana  50

并且想要一个(一组)forumla(s)遍历行并为每个具有最高价格的水果输出行。

例如PHP我会做这样的事情

foreach $array as $row{
  if in_array( $row[fruit] ){
    /* check if current $row[price] for current $row[fruit] is larger than existing post. If yes replace */
  }
}

我将如何在Google Spreadsheets / Excel中执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以使用数组公式在Excel中执行此操作(因此您可以使用 Ctrl + Shift + Enter )输入它...
如果您的水果位于B且价格为C,则D2中的数组公式将为

=C2=MAX(IF($B$2:$B$7=B2,$C$2:$C$7,0))

这将为您TRUEFALSE提供该行是否具有该水果的最高价格。

它通过在水果数组上进行IF(第2行到第7行 - 你可以使它更长)与当前水果相同 - 如果它是相同的,则返回价格,否则为0然后我们得到MAX并将其与当前行的价格进行比较。

祝你好运!

答案 1 :(得分:0)

我已经整理了一个快速的VBA宏,你可以在excel中使用它来输出价格最高的水果。

宏将水果表转换为数组,然后循环遍历数组以查找具有最高值的水果,然后将其输出到工作表。这个宏依赖于位于A到C列的水果表。

Sub getMaxPriceFruit()

'put data table into an array
Dim dataTableArray() As Variant
dataTableArray = Range("A2:C" & Cells(Rows.Count, "A").End(xlUp).Row)

'loop through the aray looking for the largest value
'capture array index in variable when largest is found
Dim maxArray(1 To 1, 1 To 3) As Variant
maxArray(1, 1) = 0
maxArray(1, 2) = ""
maxArray(1, 3) = 0

Dim i As Long
For i = 1 To UBound(dataTableArray)

    If dataTableArray(i, 3) > maxArray(1, 3) Then
        maxArray(1, 1) = dataTableArray(i, 1)
        maxArray(1, 2) = dataTableArray(i, 2)
        maxArray(1, 3) = dataTableArray(i, 3)

    End If

Next i


'output the fruit with the max value
Range("F2").Value = maxArray(1, 1)
Range("G2").Value = maxArray(1, 2)
Range("H2").Value = maxArray(1, 3)


End Sub

此脚本的限制是,如果有两个水果具有相等的最大值,则列表中具有该值的第一个水果将被选为胜利者。如果你希望额外的代码输出多个水果,如果它们具有我可以提供的相同最大值,但是简单地说你可以利用maxArray数组来捕获所有排名靠前的水果然后循环遍历这个数组以输出它们全部一个人去。

希望有所帮助!

答案 2 :(得分:0)

一个数据透视表,其中fruit代表行,price代表值(总结:MAX)可以投放。