excel 如何缩短公式

v6ylcynt  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(220)

我有三条信息:数量,每件重量和一个限制。我需要的是每件重量的倍数,而不通过限制和数量。
我做了一个代码,但问题是数量的数据各不相同,使用的代码很长。

=ROUND(IFS((F13*G13)<H13,F13*G13,((F13-1)*G13)<H13,((F13-1)*G13),
 ((F13-2)*G13)<H13,,((F13-3)*G13)<H13,,((F13-4)*G13)<H13,,((F13-5)*G13)<H13,,
 ((F13-6)*G13)<H13,(F13-6)*G13,((F13-7)*G13)<H13,(F13-7)*G13,
 ((F13-8)*G13)<H13,(F13-8)*G13,((F13-9)*G13)<H13,(F13-9)*G13,
 ((F13-10)*G13)<H13,(F13-10)*G13,((F13-11)*G13)<H13, (F13-11)*G13,
 ((F13-12)*G13)<H13,(F13-12)*G13,((F13-13)*G13)<H13,(F13-13)*G13,
 ((F13-14)*G13)<H13,(F13-14)*G13,((F13-15)*G13)<H13,(F13-15)*G13,
 ((F13-16)*G13)<H13, (F13-16)*G13,((F13-17)*G13)<H13,(F13-17)*G13,
 ((F13-18)*G13)<H13,(F13-18)*G13),-2)+200

下面是输入和预期结果,如果没有条件匹配,则返回#N/A

xpcnnkqh

xpcnnkqh1#

我不知道公式末尾的+200是否应该包含在限值中,因此只需相应地调整公式

=ROUND(IF(G13*F13+200>=H13,H13,F13*G13+200),-2)

把数量和重量相乘再加200。
如果结果等于或大于限值,则将结果设置为限值。
否则使用数量 * 重量+ 200的结果
然后根据初始公式四舍五入

qnakjoqk

qnakjoqk2#

下面是IFS()的外观:

IFS(((F13-0)*G13)<H13,(F13-0)*G13,
    ((F13-1)*G13)<H13,(F13-1)*G13,
    ((F13-2)*G13)<H13,,
    ((F13-3)*G13)<H13,,
    ((F13-4)*G13)<H13,,
    ((F13-5)*G13)<H13,,
    ((F13-6)*G13)<H13,(F13-6)*G13,
    ((F13-7)*G13)<H13,(F13-7)*G13,
    ((F13-8)*G13)<H13,(F13-8)*G13,
    ((F13-9)*G13)<H13,(F13-9)*G13,
    ((F13-10)*G13)<H13,(F13-10)*G13,
    ((F13-11)*G13)<H13,(F13-11)*G13,
    ((F13-12)*G13)<H13,(F13-12)*G13,
    ((F13-13)*G13)<H13,(F13-13)*G13,
    ((F13-14)*G13)<H13,(F13-14)*G13,
    ((F13-15)*G13)<H13,(F13-15)*G13,
    ((F13-16)*G13)<H13,(F13-16)*G13,
    ((F13-17)*G13)<H13,(F13-17)*G13,
    ((F13-18)*G13)<H13,(F13-18)*G13)

我看到三个问题:

  • 2到5的箱子不见了。2你确定是这样吗?
  • 它看起来像(对于一般的“x”):IF ((F13-x)*G13)<H13 THEN (F13-x)*G13,你可以很容易地计算出结果值,不是吗?
  • 你为什么18岁就停下来了?
iq0todco

iq0todco3#

您可以将其简化如下:

=LET(A, A2, B, B2, C, C2, seq, SEQUENCE(19,,0),
 out, IF((seq > 1) * (seq < 6), 0, (A - seq)*B),
 ROUND(@FILTER(out, (A - seq)*B < C, NA()), -2) + 200)

并将其向下扩展,或者在单元格D2中使用如下阵列版本:

=LET(A, A2:A3, B, B2:B3, C, C2:C3, seq, SEQUENCE(19,,0),
  MAP(A,B,C, LAMBDA(x,y,z, LET(out, IF((seq > 1) * (seq < 6), 0, (x - seq)*y),
  ROUND(@FILTER(out, (x - seq)*y < z, NA()), -2) + 200))))

下面是输出:

implicit intersection operator@)确保获取FILTER结果的第一个元素,这相当于获取第一个匹配的条件。如果没有条件匹配,则返回NA()。名称out的结果顺序与应通过IFS测试的顺序相同。使用SEQUENCE可以简化过程。

相关问题