我正在为老板创建电子表格以查找运费。我有两个信息表:
我们的想法是,我们应该能够放入邮政编码的第一部分,货盘的数量以及适当的费用。
例如,如果我要向BB发送5个托盘,则它应返回£188.06的价值,因为BB位于第2区,而第2区的5个托盘为£188.06。
不幸的是,我无法找到合适的功能来做到这一点。如果有人能够提供帮助,将不胜感激!
答案 0 :(得分:1)
我找到了搜索二维数组here.的基本公式,并将其从max()
值修改为完全匹配。
=INDEX(B15:F17,(SUMPRODUCT((B7:D9=A2)*ROW(B7:D9))-ROW(B7:D9)+1),B2)
sumproduct()从第一个表返回行(区域),该行与index()一起使用,并从第二个表返回装运的托盘数量。
祝你好运
答案 1 :(得分:1)
如果您希望以简单的方式使用它,则可以使用“区域”来获得一个非常简单的公式:
在我的设置中:
=INDEX(B11:P17,MAX((B2:R8=A21)*A2:A8),B21)
您需要调整范围以匹配您的数据。如果您的“区域”不是完全像示例中那样(<1,2,3,4 ...),则需要调整为:
=INDEX(B11:P17,MAX((B2:R8=A21)*ROW(A1:A7)),B21)
只需检查您的ROW()
与“邮政编码”部分的高度相同,并从第一行开始。
如果多次发现邮政编码,它将始终占据最高的区域。如果根本没有邮政编码,它将进入1区。
这是数组公式,需要通过 ctrl + shift + enter 进行确认!
答案 2 :(得分:0)
建议
我建议将邮政编码区域的布局更改为:
Postcode Zone
AA 1
AB 1
AC 1
... ...
BA 2
BB 2
BC 2
... ...
这样,使用INDEX-MATCH查找区域要容易得多。
解决方案-第1部分
但是,如果不可能(或者您只是不想这样做),我们可以将问题分解为两个简单的问题。
首先,我们需要从邮政编码前缀中检索区域。 要在没有数组公式的情况下执行此操作,我们可以使用SUMPRODUCT。
=SUMPRODUCT(LEN(<Postcode Range>)-LEN(<Postcode Range>)+<Zone Range>*(<Postcode Range>=<Postcode To Search>))
假设您的区域范围是A2:A8,并且您的邮政编码范围未超出Z列,而您要搜索的邮政编码在C1中,则为...
= SUMPRODUCT(LEN($ B $ 2:$ Z $ 8)-LEN($ B $ 2:$ Z $ 8)+ $ A $ 2:$ A $ 8 *($ B $ 2:$ Z $ 8 = $ C $ 1))
第1部分的解释
这是创建一个填充零的数组,该数组的大小与您的邮政编码范围相同:
LEN($B$2:$Z$8)-LEN($B$2:$Z$8)
LEN返回每个单元格中字符数的数组。我们不在乎字符的数量,因此我们只是从字符本身上取走了字符,这给我们留下了一个由零填充的正确大小的数组。
为此,我们然后添加区域的值。因此,阵列中的每个单元格都填充有相应的区域。
然后我们将该区域乘以:
($B$2:$Z$8=$C$1)
它将为零,除非邮政编码与我们要查找的邮政编码相同,在这种情况下,区域将乘以1。
解决方案-第2部分
现在我们已经找到了邮政编码所在的区域,使用INDEX-MATCH-MATCH可以很容易地在表2中查找成本:
=INDEX(<Cost Range>, MATCH(<Zone To Lookup (our formula from part1)>, <Zone Range>, 0), MATCH(<Pallet Qty To Lookup>, <Pallet Qty Range>,0))
因此,假设您在表2中的区域范围是A11:A17,最大托盘数量是15,要查找的托盘数量在D1中:
=INDEX($B$12:$P$18, MATCH(SUMPRODUCT(LEN($B$2:$Z$8)-LEN($B$2:$Z$8)+$A$2:$A$8*($B$2:$Z$8=$C$1)),$A$12:$A$18,0), MATCH($D$1,$B$11:$P$11,0))
第2部分的解释
INDEX的工作方式如下:
=INDEX(<Range>, <Column Number>, <Row Number>)
然后,我们使用MATCH函数来确定我们要查找的行和列,如下所示:
=MATCH(<Value To Match>, <Range To Search>, <Match Type>)
我们要查找完全匹配项,因此将“匹配类型”设置为零。
我希望这很清楚可以理解。如果没有,请告诉我,我将尝试进一步扩展。
这是最终解决方案的屏幕截图: