我有一个如下工作表
ID|AVAILABILITY|PRICE
1 |1 |10,00
1 |1 |15,00
1 |0 |12,00
2 |1 |10,00
在同一工作表中,我在MIN PRICE中执行以下操作,以获取仅可用产品的最低价格
我将其另存为数组公式
ID|MIN PRICE
1 |=MIN(IF(AND(table1[AVAILABILITY]=1;table1[ID]=L2);table1[PRICE]))
2 |
但是我得到0, 有什么解决办法吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
答案 2 :(得分:1)
我尝试创建VBA代码。任何更正所有澄清,欢迎您!
Option Explicit
Sub test()
Dim LastrowA As Long, LastrowE As Long, i As Long, ID As Long, Availability As Long, y As Long
Dim LowestPrice As Double
Dim strValues As String
Dim arr As Variant, element As Variant, IDarr As Variant
With ThisWorkbook.Worksheets("Sheet1")
LastrowA = .Cells(.Rows.Count, "A").End(xlUp).Row
strValues = ""
For i = 2 To LastrowA
ID = .Range("A" & i).Value
Availability = .Range("B" & i).Value
If Availability > 0 And (InStr(strValues, ID) = 0) Then
If i = LastrowA Then
strValues = strValues & ID
Else
strValues = strValues & ID & "|"
End If
End If
Next i
arr = Split(strValues, "|")
For Each element In arr
IDarr = element
LowestPrice = 0
For y = 2 To LastrowA
If CStr(.Range("A" & y).Value) = IDarr Then
If LowestPrice = 0 Then
LowestPrice = .Range("C" & y).Value
Else:
If LowestPrice > .Range("C" & y).Value Then
LowestPrice = .Range("C" & y).Value
End If
End If
End If
Next y
LastrowE = .Cells(.Rows.Count, "E").End(xlUp).Row
.Range("E" & LastrowE + 1).Value = IDarr
.Range("F" & LastrowE + 1).Value = LowestPrice
Next
End With
End Sub
结果:
答案 3 :(得分:0)
如果您使用 Excel for Office 365,Excel for Office 365 for Mac,Excel 2019或Excel 2019 for Mac ,则可以使用MINIFS function。
如果您使用的是旧版Excel,则可以尝试将其替换为。
使用1条条件,您可以使用这些条件。
=MAX(INDEX(range-(criterion<>criterion_range)*1E300,0))
=MIN(INDEX(range+(criterion<>criterion_range)*1E300,0))
也就是说,如果不符合条件,则减去/添加一个很大的数字以使范围内的相应值不在考虑范围之内。这些不是数组公式。
对于2个或更多条件,
=MAX(IF(criterion1=criterion1_range,IF(criterion2=criterion2_range,range)))
=MIN(IF(criterion1=criterion1_range,IF(criterion2=criterion2_range,range)))
嵌套IF调用的想法是,当不满足第一个条件时,无需检查后续条件。这样执行最少的比较。理想的情况是将最不满足的条件放在第一位,然后再把最不满足的条件放在第二位,依此类推。