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

时间:2011-02-21 11:33:53

标签: excel formula

我有一个

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

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

5 个答案:

答案 0 :(得分:6)

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

你可以尝试

=INDEX(1:1,0,COUNTA(1: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

答案 2 :(得分: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公式,这是不行的。请回复if你找到了它)

答案 3 :(得分:0)

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

免责声明:此解决方案

  • Inelegant
  • 计算重量
  • 会溢出中等大的记录(对我来说~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的“最大索引”

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

答案 4 :(得分:0)

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

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

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

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