Excel:查找数组中的最后一个值

我有一个数据集

> A bc d...AA,BB >1,2,3,4 > apple apple apple > orange pear pear apple pear > grapefruit,grape, grape,grape 

有没有办法通过Excel中的公式自动查找数组中的特定水果的最终发生?

您需要使用counta来告诉您数组和index有多less项目才能获取最后一个元素的值。

你可以试试

=INDEX(1:1,0,COUNTA(1:1))

这将find1:1数组中的最后一个值。

编写一个用户定义的函数来从最后一个单元向后search数据

 Function LastFruit(r As Range, Fruit As String) As Range Dim rw As Long, col As Long For rw = r.Rows.Count To 1 Step -1 For col = r.Cells.Count To 1 Step -1 If r.Cells(rw, col) = Fruit Then Set LastFruit = r.Cells(rw, col) End If Next Next End Function 

你可能想试试这个,虽然它迫使你创build一个额外的数组,但它会查找第一个匹配项:将你的水果数据放在A1:A10中,并在B1:B10中添加一个额外的列(这是重要的,强制的(见VLOOKUP说明:它必须是?1:?10)),数字从1到10

要填充B列,您可以根据需要使用类似的公式

 = ROWS($B$1:B1) = ROW() + offset 

那么得到你的信息的公式是VLOOKUP(HLookup,如果你的数据是水平的)。 它将查找参数matrix最左边一列的值,并返回第二列中的匹配值(在本例中是第三个参数,B列)。 错误是要求完全匹配。

 = VLOOKUP("orange", A1:B10, 2, FALSE) 

记住缺点:*你必须添加一个额外的数据列,方便或不*它会寻找第一个结果。 期。

(我仍然在寻找一种更好的方式来真正find一组结果的MIN和MAX,但是还没有成功,除非使用Ctrl-Shift-Enter公式,这是一个不可行的方法。 )

另一个非常不同的解决scheme,很less有人会喜欢:目标是使用包含所有匹配的巨大数字作为位掩码。 然后,使用算术,你可以find最后一场比赛。

声明:这个解决scheme是

  • 不雅
  • 计算意义重大
  • 会有中等大的纪录溢出(对我来说〜1015)。 溢出可能会导致干净的错误(#NUM),也可能会给一个错误的数字由于过度浮动四舍五入(我没有观察到,但它仍然是可能的)

你需要有一个和你的数据集一样大小的序列号(不一定要靠近)。 如果您的水果在A1:A10中,则可以将值(1..10)放在Z1:Z10中。

 = FLOOR(IMLOG2( SUMPRODUCT( (A1:A10 = "orange")*1 ; Z1:Z10 ) ; 1) 

我们来看看它:

  • SUMPRODUCT将使位掩码包含1的任何地方,你有橙字
  • IMLOG2(为什么Excel没有一个真正的数字log2?)会得到你的掩码(float)log2
  • FLOOR会截断它,结果是位掩码中1的“最大索引”

希望你会find其他的算术操作来寻找其他的匹配

假设我们在A1:J1中有水平的水果数组名称。 最后一次出现“apple”的列号是:

 {=MAX(COLUMN(A1:J1)*(A1:J1="apple"))} 

不要忘记按Ctrl + Shift + Enter,这是一个数组公式。

这与PPC的位掩码和序列号的概念是一样的,但是是独立发明的,并且以更紧凑的方式expression。 :)我还没有给它一个很大的压力testing,但是我看到在每个实例的数百个项目的多个地方使用更复杂的公式没有问题,这对我来说已经足够了。