2017-04-02 97 views
0

我确信我正在重新解决问题。我试图实现的是一个结果数组,其中只包含第一列中的数据是唯一的和排序的行。基于列的唯一性过滤行

因此,使用的示例性阵列(说片 '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' 。

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

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

但我的数据库表是25000行(10 +宽),因此似乎打破了GS2米细胞限制(>矩阵1414 * 1414) - 大数组产生'列预期21,414,实际列1'类型错误 - 而不是更有用的'你打破了极限!

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

我试过QUERY(),但是又一次破坏了UNIQUE()元素。

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

UNIQUE(...)在关键提塔重复方面工作正常,但我怎么那么表示该行的其余部分到每个独特的条目?

UNIQUE({A1:A; FILTER({A1:d ...)})导致

我希望一个简单的排序(UNIQUE(...)) '没有发现价值' 会理想的解决方案,但唉,看起来我看着错误的草垛。

我也尝试了以下结构,但是要么处理时间的长度或我的语法已经瘫痪了任何结果。

生成的数组btw只是一个更合理的用户表的帮助器数组,它将对上面的结果使用IMPORTRANGE()。

  • thx以Yogi-Anand为第一个解决方案。
+0

谢谢都@杰克 - 布朗现在我要度过一个有趣的晚上工作了其中一个最有效的作品在处理开销方面。我会报告回来!非常感激。 – DeeKay789

+0

感谢@ aurielle-perlmann非常感谢。 – DeeKay789

+0

测试完成,两者都是优秀的解决方案。我是错误陷阱的主张,所以Aurielle的解决方案对我来说更好。然而,两种解决方案在彼此之间执行一秒钟(21,500行,6列),所以我选择了Paul的解决方案,因为它看起来更直观,更易于维护。我在这里学到的主要教训是VLOOKUP可以将一个数组作为列参数。不仅如此,列顺序可以按照QUERY函数进行排列。对于第一次看到这一点的人来说,任何列也可以在序列中的任意位置重复。谢谢大家。 – DeeKay789

回答

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中的匹配对应的第一行。这意味着输入数组中数据的顺序很重要。

希望有帮助!

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