Excel 嵌套动态数组公式,仅筛选明显差异

Excel 嵌套动态数组公式,仅筛选明显差异

我正在处理一个包含多种产品类型的大型数据集,这些产品需要上传到 Shopify。为了显示正确的下拉菜单,我必须让 Shopify 知道“子项”(变体)的不同之处。对于此屏幕截图中的苹果,颜色是区分因素,对于橙子,大小是区分因素。我不知道如何表述这个问题,而且我以前也遇到过同样的情况(类似的问题,我需要在大型数据集中查看差异)所以也许你可以帮忙 :)

Excel 的屏幕截图

答案1

测试哪个数组具有最多的唯一值并返回该数组:

=LET(a,UNIQUE(FILTER(fruits[Color],fruits[Fruit]=fruits[@Fruit],"")),b,UNIQUE(FILTER(fruits[Size],fruits[Fruit]=fruits[@Fruit],"")),TRANSPOSE(IF(IF(a="",0,COUNTA(a))>IF(b="",0,COUNTA(b)),a,b)))

在此处输入图片描述

答案2

您已经有了数据集的表格,因此请为水果列表和每种水果使用的区分符(数据集表格中的列)制作另一个表格(或只是一个范围,但看起来您喜欢和/或习惯使用表格)。也许您可以在 E1:F3 中执行此操作。

然后构建输出表:不是表格,而是一个常规范围。也许它会从 H1 开始。将其标记为“水果”,然后继续使用以下公式标记接下来的十列:

="Diff-"&(COLUMN()-8)

或者任何看起来像是水果区分元素的好的列标题。

为什么是正常范围而不是表格?因为表格不允许SPILL其中的公式起作用。而您希望拥有该功能。(这不是因为列标题会转换为文本……这根本不是什么不愉快的事情。)

在 H2 中,放置此公式以列出数据集“水果”列中的所有唯一项目:

=UNIQUE(INDIRECT("Table1["&H1&"]"))

或者,您知道,不要像那样将其连接到 H1,而直接使用:

=UNIQUE(Table1[Fruit])

现在您有了合适的标题和一列,其中收集了数据集“水果”列中存在的所有水果名称……唯一名称集,而不是所有条目。您现在需要的只是它们独有的现有区别因素。

=TRANSPOSE(UNIQUE(INDEX(FILTER(Table1[[Color]:[Size]],Table1[Fruit]=H2),,MATCH(XLOOKUP(H2,Table2[Fruit],Table2[Differentiator]),Table1[[#Headers],[Color]:[Size]],0))))

XLOOKUP(H2,Table2[Fruit],Table2[Differentiator])使用 H 列中的值在第二个表中查找水果的区分符。它将该值传递给MATCH()包装它的函数,该函数将其与数据集表的标题进行比较,并返回一个数字,您将在最终函数中将其用作列号INDEX()

对于该INDEX()函数,您希望使用所有其他可接受的行,因此空逗号之间通常会有一个行号。

INDEX()需要一个数据集来处理,这就是FILTER()您要做的。它的测试在数据集表 H2 中查找水果,并返回与水果匹配的行。但它会返回所有特征列(这里是两个,但将来您可以将其扩展到更多)。

INDEX()然后使用找到的列号MATCH()向公式仅返回一个特征列。

现在您只剩下右列和其中与 H2 中的水果相关的行,您可以开始UNIQUE()工作了。

它将返回您需要的唯一值的列。但是您需要一行,所以该TRANSPOSE()函数会为您完成一切。

SPILL为您填写行。按要求抄录下来。

然后以您需要的任何方式收集输出数据(复制并粘贴到其他程序中(可能是直接复制和粘贴到“Shopify”),粘贴到您保存为 CSV 文件的传输电子表格中,或者电子表格可以工作,无论您如何操作。SPILL数组复制并粘贴得很好。

然后,当你有时间的时候,用它修饰一下LET(),给可怕的“Table1[[Color]”引用真正可读的名称,并将你可能想要编辑的输入(如“H2”)放在绝对开始处,以便于查找和编辑它们。

最后,在设置 T/tables 时,考虑将它们分开,也许放在不同的工作表上,以便随着时间的推移添加更多种类的项目时轻松扩展它们。

相关内容