尝试根据 4 个条件从表中返回值 - 不完全匹配

Trying to return values from a table based on 4 criteria - not exact matches

提问人:Kevin T 提问时间:8/31/2023 更新时间:8/31/2023 访问量:44

问:

我正在尝试根据商品的市场、重量、高度、长度和宽度退还运费。

我尝试使用具有多个条件的索引匹配,但未能成功确保它考虑了所有条件。

问题是重量和尺寸不会完全匹配,它们被归类为某些批次。

如果它可以在数组中工作,我会使用当前的公式进行管理,但由于它有 ifs 和 ands,所以它必须在每一行上。

这是一个示例电子表格的链接,其中一张表格包含我当前使用的重量和尺寸数据的计算。另一个是表格中列出的运费。

https://docs.google.com/spreadsheets/d/1ybaS8KYUfiDkvG-5wGcFN3XsyC-SLfZrwChV-xNKMNk/edit?usp=sharing

这是我目前正在使用的公式,它工作正常,但运行速度有点慢。

=IFNA(
IFS(AND(E3<=20,F3<=15,D3<=1,C3<=80),
      IFS('MAIN TEMPLATE'!$F$1="UK",0.86,
          'MAIN TEMPLATE'!$F$1="DE",1.19,
          'MAIN TEMPLATE'!$F$1="FR",1.6,
          'MAIN TEMPLATE'!$F$1="IT",2.01),
  AND(E3<=33,F3<=23,D3<=2.5),
    IFS(C3<=60,
      IFS('MAIN TEMPLATE'!$F$1="UK",1.03,
          'MAIN TEMPLATE'!$F$1="DE",1.38,
          'MAIN TEMPLATE'!$F$1="FR",1.87,
          'MAIN TEMPLATE'!$F$1="IT",2.12),
        C3<=210,
      IFS('MAIN TEMPLATE'!$F$1="UK",1.21,
          'MAIN TEMPLATE'!$F$1="DE",1.58,
          'MAIN TEMPLATE'!$F$1="FR",2.54,
          'MAIN TEMPLATE'!$F$1="IT",2.38),
        C3<=460,
      IFS('MAIN TEMPLATE'!$F$1="UK",1.59,
          'MAIN TEMPLATE'!$F$1="DE",1.88,
          'MAIN TEMPLATE'!$F$1="FR",3.32,
          'MAIN TEMPLATE'!$F$1="IT",3.07)),
  AND(E3<=33,F3<=23,D3<=4),
      IFS('MAIN TEMPLATE'!$F$1="UK",1.91,
          'MAIN TEMPLATE'!$F$1="DE",2.14,
          'MAIN TEMPLATE'!$F$1="FR",3.64,
          'MAIN TEMPLATE'!$F$1="IT",3.12),
  AND(E3<=33,F3<=23,D3<=6),
      IFS('MAIN TEMPLATE'!$F$1="UK",2.09,
          'MAIN TEMPLATE'!$F$1="DE",2.51,
          'MAIN TEMPLATE'!$F$1="FR",4.04,
          'MAIN TEMPLATE'!$F$1="IT",3.26),
  AND(E3<=35,F3<=25,D3<=12),
    IFS(C3<=150,
      IFS('MAIN TEMPLATE'!$F$1="UK",2.38,
          'MAIN TEMPLATE'!$F$1="DE",3.02,
          'MAIN TEMPLATE'!$F$1="FR",4.33,
          'MAIN TEMPLATE'!$F$1="IT",3.8),
        C3<=400,
      IFS('MAIN TEMPLATE'!$F$1="UK",2.51,
          'MAIN TEMPLATE'!$F$1="DE",3.11,
          'MAIN TEMPLATE'!$F$1="FR",4.74,
          'MAIN TEMPLATE'!$F$1="IT",4.06))))
google-sheets-formula 索引匹配

评论


答:

0赞 Martín 8/31/2023 #1

这是我的建议。它使用 BYROW 来应用于您范围内的所有行。然后使用 COUNTA,它发现如果行为空,则不会计算。

使用 INDEX 和 XMATCH,我将费用范围限制在国家/地区的列中,并使用 FILTER 和第二个 BYROW 比较 A-D 列的每个值,以查看它们是否小于或等于费用参数。然后,使用 MIN,它只会找到可以包含套餐的所有费用的最小值:

=BYROW(A2:D,LAMBDA(r,IF(COUNTA(r)=0,,
  MIN(FILTER(INDEX('Shipping table'!$E$2:$I$9,,XMATCH('MAIN TEMPLATE'!$F$1,'Shipping table'!$E$1:$I$1)),
    BYROW('Shipping table'!$A$2:$D$9,LAMBDA(each,PRODUCT(INDEX(--(each>=r))))))))))

enter image description here

评论

0赞 Kevin T 9/3/2023
完美的解决方案。谢谢
0赞 Martín 9/3/2023
我很高兴它很有用!