使用 LEFT 函数提取数字前的所有内容不适用于溢出数组

Using the LEFT function to extract everything before a number doesn't work well with spilled arrays

我目前正在尝试提取商店 ID 的前缀,以便能够生成仅具有该前缀的商店列表。

单元格 D1 具有用于提取唯一前缀的公式:

=TRANSPOSE(UNIQUE(LEFT(C2#, MIN(FIND({0,1,2,3,4,5,6,7,8,9},C2#&"0123456789"))-1)))

单元格 C2 具有从另一个 sheet 中提取唯一商店 ID 的公式:

=UNIQUE(INDEX('Male Shoes'!A1#,,6))

问题在于 D1 中的公式仅 return 所有唯一前缀中的前两个字符,而不是为每个前缀使用正确的值。

我在第 I 列中设置了与 D1 中相同的公式,但没有 TRANSPOSE() 和 UNIQUE() 函数,并删除 # 以查看是否 return 是正确的值。我把它拖到 C 列的长度。

=LEFT(C2, MIN(FIND({0,1,2,3,4,5,6,7,8,9},C2&"0123456789"))-1)

在单元格 J2 中,我将相同的公式放入 I2,但将 # 保留为控件。

=LEFT(C2#, MIN(FIND({0,1,2,3,4,5,6,7,8,9},C2#&"0123456789"))-1)

我相信 MIN() 函数是 return 整个数组的最小值,而不是每一行的最小值。我还没有找到如何在网上任何地方缓解这个问题。

在我的示例数据中,这不是问题,因为 D 到 G 中的所有列都为我提供了我期望的列表,但随着更多国家的添加,我可能会以重复的国家前缀结束。 (即:如果前缀缩短为 2 个字符 - Germany=GE 和 Georgia=GE)

如果它总是 2 或 3,一个简单的 IF 而不是 FIND 将起作用:

=TRANSPOSE(UNIQUE(LEFT(C2#,IF(ISNUMBER(--MID(C2#,3,1)),2,3))))

编辑:

如果只有一次从字母切换到数字,我们可以使用:

=TRANSPOSE(UNIQUE(LEFT(C2#,MMULT(ISNUMBER(--MID(C2#,SEQUENCE(,MAX(LEN(C2#))),1))*ISERROR(--MID("A"&C2#,SEQUENCE(,MAX(LEN(C2#))),1)),SEQUENCE(MAX(LEN(C2#))))-1)))

这不关心字符串中有多少个字符,只关心它只有 1 次从字母切换到数字。所以 ABDEFGHTEV4567 会起作用,但 A3D4 不会。