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

问题描述 投票:1回答:5

我有一个数据集

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

有没有办法通过Excel中的公式自动找到数组中特定水果的最终出现?

excel formula
5个回答
6
投票

你需要使用counta来告诉你数组中有多少项,index来获取最后一个元素的值。

你可以试试

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

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


0
投票

编写用户定义的函数以从最后一个单元格向后搜索数据

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

0
投票

您可能想要尝试这个,虽然它会强制您创建一个额外的数组,它会查找第一个匹配项:将您的水果数据放在A1:A10中并在B1:B10旁边添加一个额外的列(这很重要且唉强制性(参见VLOOKUP描述:必须是?1:?10)),数字从1到10

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

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

然后,获取您的信息的公式是VLOOKUP(如果您的数据数组是水平的,则为HLookup)。它将在参数矩阵的最左列中查找值,并在第二列中返回匹配值(在我们的示例中,第三个参数,列B)。 FALSE要求完全匹配。

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

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

(我仍然在寻找一种更好的方法来真正找到一系列发现的MIN和MAX,但还没有成功,除了使用Ctrl-Shift-Enter公式,这是不行的。如果你发现它,请回复)


0
投票

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

免责声明:此解决方案是

  • 不雅
  • 计算量很大
  • 会溢出中等大的记录(对我来说~1015)。溢出可能导致清除错误(#NUM),并且由于过多的浮动舍入可能也会给出错误的数字(我没有观察到它但仍然可以)

您需要一个与数据集大小相同的序列号数组(尽管不必关闭)。如果您的水果在A1:A10中,您可以将值(1..10)放在Z1:Z10中。

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

我们来看看吧:

  • SUMPRODUCT将使包含1s的位掩码在任何有橙色字的位置
  • IMLOG2(为什么Excel没有实数log2?)会得到掩码的(浮点)log2
  • FLOOR将截断它,结果是位掩码中1s的“最大索引”

希望你能找到其他算术来寻找其他比赛


0
投票

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

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

别忘了按Ctrl + Shift + Enter,这是一个数组公式。

它与PPC的位掩码和序列号的概念相同,但是以独立的方式发明并以更紧凑的方式表达。 :)我没有给它一个很大的压力测试,但我发现在每个实例中在数百个项目的多个位置使用更复杂的公式没有问题,这对我来说已经足够了。

© www.soinside.com 2019 - 2024. All rights reserved.