TL;DR
=ARRAYFORMULA(IF(B2:B<>"", IFS(B2:B="Lightweight Trainers", "LW")&"-"&IFS(I2:I="Blue", 1, I2:I="Red", 2)&"-"&K2:K,))
回答
你想要的基本上是:
<title>-<color number>-<shoe size>
要将其转换为函数,我们可以将其拆分为各个部分并逐步进行:
第 1 步:标题
对于第一部分 - 标题 - 我们需要将值与简写相匹配。 IFS 中的简单列表就足够了。
IFS(B2="Lightweight Trainers", "LW")
显然,目前它只有一个值(Lightweight Trainers),但您可以添加更多:
IFS(B2="Lightweight Trainers", "LW", B2="Heavyweight Trainers", "HW")
第 2 步:颜色编号
与上一步类似,是使用 ifs 的映射:
IFS(I2="Blue", "-1", I2="Red", "-2")
添加了破折号,因此在添加所有内容时,只有在
第 3 步:鞋码
在这种情况下,我们可以简单地获取值:
K2
第 4 步:将所有内容加在一起
我们只需要在中间加上破折号:
=IFS(B2="Lightweight Trainers", "LW")&"-"&IFS(I2="Blue", 1, I2="Red", 2)&"-"&K2
第 5 步:自动扩展整列
我们将使用ARRAYFORMULA 将单个公式添加到第一个单元格并使其自动扩展到整个列。我们首先将其添加到我们已有的公式中,然后将范围扩展到整列:
=ARRAYFORMULA(IFS(B2:B="Lightweight Trainers", "LW")&"-"&IFS(I2:I="Blue", 1, I2:I="Red", 2)&"-"&K2:K)
记得删除列中的所有值,这样数组公式就不会覆盖它们(会产生错误)。
如您所见,公式会为没有值的行生成错误。处理这种情况的一个好方法是过滤没有标题的行。在一行中是:
=IF(B2<>"", [the entire formula],)
注意最后一个逗号。
因此,将所有内容放在一起并将其范围扩展到列,就是:
=ARRAYFORMULA(IF(B2:B<>"", IFS(B2:B="Lightweight Trainers", "LW")&"-"&IFS(I2:I="Blue", 1, I2:I="Red", 2)&"-"&K2:K,))
将此添加到N2 应该可以。
结语
当大小不是整数时,您似乎使用 150。如果您想保留该功能,您可以使用:
IF(K2-int(K2)=0, K2, 150)
在最后一个组件上并以相同的方式展开它。
您可能还希望在缺少值时防止出现两个破折号(LW-5 而不是LW--5)。为此,我建议将其添加到每个组件中,而不是将它们添加到一起的公式中。
参考文献