=INDEX(D1:D6;MATCH(1;(E1=A1:A6)*(E2=B2:B6)*(DATEVALUE(MID(E3;1;10))>=DATEVALUE(MID(C1:C6;1;10)));0))
我有一个excel文件,其中包含每个productId组合的价格(A列和B列)以及有效日期。 如您所见,它可能包含productId组合的重复项,并且仅在日期过后才有效。 这是我到目前为止想出的公式,但是只有在行按A B和C排序时才有效(特别是C应该降序排序)。 在示例中,我期望正确的结果价格为600.00,但它返回200.00。
我理解为什么会这样。但是我不知道如何修复它并使它正常工作。 正确的意思是:
提供产品ID: D318JV 00B6
如果有效日期> = 07/18/2019 00:00:00 => 600.00
如果有效日期在07/07/2019 00:00:00到07/18/2019 => 400.00
如果有效日期在06/01/2019 00:00:00和07/07/2019之间=> 200.00
如果有效日期为06/01/2019 00:00:00之前=> N / A
任何帮助使该公式生效的帮助都会受到赞赏
答案 0 :(得分:2)
结合从问题和评论到@matro答案的方法:
=MAX(IF((E1=A1:A6)*(E2=B1:B6)*(E3>=C1:C6); C1:C6))
=INDEX(D1:D6; MATCH(1; (E1=A1:A6)*(E2=B1:B6)*(E4=C1:C6); 0))
答案 1 :(得分:2)
仅使用 1个公式使用以下ARRAY公式:
=INDEX(D1:D6,MATCH(1,(E1=A1:A6)*(E2=B1:B6)*(C1:C6=MAX(IF(C1:C6<E3,C1:C6,0))),0))
确保使用CTRL + SHIFT + ENTER确认公式。查看示例工作的屏幕截图:
您可能必须将,
的{{1}}更改。在这种情况下,公式将如下所示:
;
答案 2 :(得分:1)
我相信@Kaiser已经提供了正确的答案,但是如果他可以将 DATEVALUE 纳入其职能,那就更好了。看来,C列中的原始日期(可能还有查找日期)是文本。
所以最终公式可能看起来像这样:
{=INDEX(D1:D6,MATCH(1,(A1:A6=E1)*(B1:B6=E2)*(DATEVALUE(C1:C6)=MAX(IF(DATEVALUE(C1:C6)<DATEVALUE(E3),DATEVALUE(C1:C6),0))),0))}
或者在@isioutis的系统中这样:
{=INDEX(D1:D6;MATCH(1;(A1:A6=E1)*(B1:B6=E2)*(DATEVALUE(C1:C6)=MAX(IF(DATEVALUE(C1:C6)<DATEVALUE(E3);DATEVALUE(C1:C6);0)));0))}
我的习惯是给范围命名,以使我的公式更易于解释,因此,如果执行以下操作:
将列A命名为“ ProductId_A ”
将B列命名为“ ProductId_B ”
将列C命名为“ 日期列表”
将列D命名为“ 价格列表”
并将查找条件命名为
' Lookup_A '
' Lookup_B '
'查询日期'
您将看到一个公式如下:
{=INDEX(Price_List,MATCH(1,(ProductId_A=Lookup_A)*(ProductId_B=Lookup_B)*(DATEVALUE(Date_List)=MAX(IF(DATEVALUE(Date_List)<DATEVALUE(Lookup_Date),DATEVALUE(Date_List),0))),0))}
或
{=INDEX(Price_List;MATCH(1;(ProductId_A=Lookup_A)*(ProductId_B=Lookup_B)*(DATEVALUE(Date_List)=MAX(IF(DATEVALUE(Date_List)<DATEVALUE(Lookup_Date);DATEVALUE(Date_List);0)));0))}
请在下面查看一些测试结果(请注意,我系统中的日期格式为dd / mm / yyyy):
要注意的一件事是,如果isioutis的以下语句有效,
只有在日期过去之后它们才有效
然后 2019年7月18日00:00:00 的查找价格应为 400美元,因为从技术上讲,这一天尚未过去,这意味着600美元不是该日期的有效价格。否则,在将查找日期与日期列表进行比较时,请在公式中使用“ <= ”(小于等于)。
干杯:)
答案 3 :(得分:0)
数据:具有以下字段的表格:产品,ID,生效日期,价格
要求:提取与给定日期范围相对应的产品ID的价格。
假设:该解决方案假定产品,ID,价格和日期组合是唯一的。
日期条件:下表显示了几种可用于根据生效日期检索产品ID价格的条件格式,还显示了将应用于每个条件的选择条件的结果包含多个项目时。
公式::由于该表包含产品,ID,价格和日期的唯一组合,并且预期输出为数字(即价格),因此使用SUMIFS
函数似乎很合适
条件: 1。等于
公式:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID,
[Effective Date range], #Date )
位置:
[价格范围] =价格列
[产品范围] =产品列
#Product =我们需要找到的产品
[ID范围] = ID列
#ID =我们需要找到的ID
[生效日期范围] =生效日期列
#Date =我们需要找到的日期
其他条件:接下来的五个条件可能返回几个可能的Dates
,因此我们将使用函数AGGREGATE
选择所需的Date
条件表。
公式:
= AGGREGATE( #Sel, 6, [Effective Date range] /
( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] #ƒ #Date) ), 1 )
位置:
#Sel =根据条件表(即14 =最晚日期和15 =最早日期)
#ƒ=根据所需条件进行比较
然后,我们将使用SUMIFS函数中AGGREGATE函数产生的日期来获取所需的价格:
公式:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID,
[Effective Date range], #AGGREGATE )
位置:
#AGGREGATE = AGGREGATE函数的结果日期
对于最后五个条件,基本公式为:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
AGGREGATE( #Sel, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ( [Effective Date range] #ƒ #Date ) ), 1 ) )
,我们只需将#Sel
和#ƒ
替换如下:
条件: 2。之前
#Sel = 14
#ƒ= <
条件: 3。之前或等于
#Sel = 14
#ƒ= <=
条件: 4.Between
#Sel = 15
#ƒ= >=
和<=
#Date1 =日期
#Date2 =日期
公式:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2) ), 1 ) )
条件: 5。之后或等于
#Sel = 15
#ƒ= >=
条件: 6。之后
#Sel = 15
#ƒ= >
解决方案::为了对每个标准应用所需的公式,我们需要将所有标准组合为一个公式。尽管可以通过一系列嵌套的IF
实现,但是我们将使用函数CHOOSE
公式:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
CHOOSE( #Criteria, #Date,
AGGREGATE( 14, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] < #Date) ), 1 ),
AGGREGATE( 14, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] <= #Date) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] >= #Date) ), 1 ),
AGGREGATE( 15, 6, [Effective Date range] / ( ([Product range] = #Product) * ([ID range] = #ID)
* ([Effective Date range] > #Date) ), 1 ) ) )
位置:
#Criteria =根据条件表(即1到6)
应用的条件
#ƒ=根据所需条件进行比较
可以使用公式数组来进一步减少公式的长度
公式数组:
= SUMIFS( [Price range], [Product range], #Product, [ID range], #ID, [Effective Date range],
IF( #Criteria = 1, #Date,
AGGREGATE( LOOKUP( #Criteria, {1,"N/A";2,14;4,15} ), 6, [Effective Date range] /
( ( [Product range] = #Product ) * ( [ID range] = #ID )
* CHOOSE( #CRITERIA, "N/A",
[Effective Date range] < #Date, [Effective Date range] <= #Date,
([Effective Date range] >= #Date1) * ([Effective Date range] <= #Date2),
[Effective Date range] >= #Date,[Effective Date range] > #Date ) ), 1 ) ) )
实施:
假设数据表位于B2:E8
在单元格L6
中输入此公式,然后复制到L7:L9
= SUMIFS( $E$6:$E$11, $B$6:$B$11, $H$6, $C$6:$C$11, $H$7, $D$6:$D$11,
CHOOSE( LEFT( $I6 ), $J6,
AGGREGATE( 14, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 < $J6 ) ), 1 ),
AGGREGATE( 14, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 <= $J6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 >= $J6 ) * ( $D$6:$D$11 <= $K6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 >= $J6 ) ), 1 ),
AGGREGATE( 15, 6, $D$6:$D$11 / ( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* ( $D$6:$D$11 > $J6 ) ), 1 ) ) )
在单元格M6
中输入此公式数组,然后复制到M7:M9
FormulaArrays
按下 CTRL + SHIFT + ENTER 进入如果输入正确,公式将包含在{
和}
中。
= SUMIFS( $E$6:$E$11, $B$6:$B$11, $H$6, $C$6:$C$11, $H$7, $D$6:$D$11,
IF( --LEFT( $I6 ) = 1, $J6,
AGGREGATE( LOOKUP( --LEFT( $I6 ), {1,"N/A";2,14;4,15} ), 6, $D$6:$D$11 /
( ( $B$6:$B$11 = $H$6 ) * ( $C$6:$C$11 = $H$7 )
* CHOOSE( LEFT( $I6 ), "N/A",
$D$6:$D$11 < $J6, $D$6:$D$11 <= $J6,
( $D$6:$D$11 >= $J6 ) * ( $D$6:$D$11 <= $K6 ),
$D$6:$D$11 >= $J6, $D$6:$D$11 > $J6 ) ), 1 ) ) )
下图显示了另一种格式:
建议阅读有关使用的资源:
AGGREGATE function,
CHOOSE function,
SUMIFS function
答案 4 :(得分:-1)
如果我正确理解了您的问题,则希望在给定的时间(=输入变量)找到给定产品的相关价格(=输出变量)。
我尝试仅使用简单的productID(1和2)以及问题中所述的有效日期和价格来重构您的用例。我想我找到了解决方案,并使用this site进行了解决。
通常,解决方案可能是结合了MAX
和IF
函数的数组公式。还需要对您的需求进行一些分析,如下所示:
如果我对源页面的解释不够清楚,请告诉我。
如果是这种情况,here是我的示例Excel文件,其中包含建议的解决方案。
感谢和问候。
Matej