【问题标题】:Spreadsheet/Excel array functions that compare and validate values比较和验证值的电子表格/Excel 数组函数
【发布时间】:2014-10-05 12:25:08
【问题描述】:

我得到了这个数据集

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 电子表格/Excel 中执行此操作?

【问题讨论】:

  • 你的数据集是按照水果升序排序然后价格排序吗?

标签: excel-formula google-sheets


【解决方案1】:

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

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

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

它的工作原理是在与当前水果相同的水果数组(第 2 到 7 行 - 你可以让它更长)上执行 IF - 如果相同,则返回价格,否则返回 0。我们然后获取MAX 并将其与当前行的价格进行比较。

祝你好运!

【讨论】:

  • 我认为答案很好。在所示的特定情况下,数据有序且每种水果都有一个最高价格,您可以将 =B2B3 放入 D2,但船长的回答更为笼统。
  • @Joseph 这对你有用吗?随意接受答案!
【解决方案2】:

我整理了一个快速 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 数组来捕获所有排名靠前的水果,然后遍历该数组以将它们全部输出一口气。

希望有帮助!

【讨论】:

    【解决方案3】:

    可以使用带有fruit 行和price 值的数据透视表(摘要:MAX)。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多