根据列的唯一性筛选行

时间:2017-04-02 15:47:04

标签: google-sheets

我确定我再次过度思考问题。我试图实现的只是一个结果数组,它只包含第一列中的数据唯一且已排序的行。

所以使用示例数组(比如表' DB')

A     B     C     D
Me    Pink  Car   Top
Me    Blue  Bike  Middle
You   Pink  Car   Bottom
They  Pink  Bike  Bottom
You   Blue  Bike  Top
Them  Red   Car   Middle
Them  Blue  Car   Top
Me          Bike  Middle
You         Car 
Us                Top

另一张表中的结果(例如'结果')

A     B     C     D
Me    Pink  Car   Top
Them  Red   Car   Middle
They  Pink  Bike  Bottom
Us                Top
You   Pink  Car   Bottom

理想情况下,单个公式将进入结果!A1'。

暂时忽略SORT元素,这个大锤只适用于小数组

=filter(A1:D13,mmult((A1:D13=transpose(A1:D13))*(row(A1:D13)>=transpose(row(A1:D13))),row(A1:D13)^0)=1)

但是我的DB表是25,000+行(10+宽),所以似乎打破了GS 2m单元格限制(>矩阵1414 * 1414) - 大型数组产生了一个预期为21,414的列,实际列1和# 39;类型错误 - 而不是更有用'你打破了限制!'

请注意。到目前为止,上述解决方案效果最好,因为原始数据未排序。

我已经尝试了QUERY()但是再次打破了UNIQUE()元素。

=Query('DB!A2:I, "select * where Col1 matches '"&UNIQUE(DB!A2:A)&"'",0))
  • 错误'否Col1 / A'

UNIQUE(...)在删除重键列中的重复项方面工作正常,但我如何将其余行表示为每个唯一条目?

独特({A1:A;过滤器({A1:D ...)})导致“未找到任何值”'

我希望一个简单的SORT(UNIQUE(...))是理想的解决方案,但似乎我看错了大海捞针。

我也尝试过以下结构,但是处理所花费的时间或我的语法都会导致任何结果瘫痪。

生成的数组btw将只是一个更合理的用户工作表的辅助数组,将在上面的结果上使用IMPORTRANGE()。

  • thx到Yogi-Anand获得第一个解决方案。

2 个答案:

答案 0 :(得分:1)

这应该可以解决上述数据:

=sort(iferror(ARRAYFORMULA(VLOOKUP(UNIQUE(A2:A),A2:D,{1,2,3,4},false)),""),1,true)

给出以下结果:

Me      Pink    Car     Top
Them    Red     Car     Middle
They    Pink    Bike    Bottom
Us                      Top
You     Pink    Car     Bottom

如果您需要在vlookup中包含更多列,则可以像这样添加:

VLOOKUP(UNIQUE(A2:A),A2:(till which Column),{1,2,3,4,5... (Add your columns here)},false

但是,注意Vlookup将返回与A列中的匹配相对应的第一行。这意味着输入数组中数据的顺序很重要。

希望有所帮助!

答案 1 :(得分:0)

这个公式实现了这个目的:

=ARRAYFORMULA(if(istext(SORT(UNIQUE(Sheet3!A:A))),arrayformula(VLOOKUP(SORT(UNIQUE(Sheet3!A:A)),Sheet3!A:D,{1,2,3,4},false)),))

enter image description here