我有这个数据集
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中执行此操作?
答案 0 :(得分:1)
您可以使用数组公式在Excel中执行此操作(因此您可以使用 Ctrl + Shift + Enter )输入它...
如果您的水果位于B
且价格为C
,则D2
中的数组公式将为
=C2=MAX(IF($B$2:$B$7=B2,$C$2:$C$7,0))
这将为您TRUE
或FALSE
提供该行是否具有该水果的最高价格。
它通过在水果数组上进行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)可以投放。