Excel中:在数组中查找最后一个值(Excel: Find last value in an ar

2019-09-29 09:22发布

我有一个数据集

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

有没有办法通过上述公式在Excel会自动找到阵列中的特定水果的最终occurence?

Answer 1:

您需要使用counta来告诉你有多少项目是如何数组和index ,以获得最后一个元素的值。

你可以试试

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

这将找到1中的最后一个值:1阵列。



Answer 2:

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

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


Answer 3:

你可能想试试这个,虽然它强迫你做一个额外的阵列,它查找第一次出现:把你的水果数据在A1:A10,并添加一个额外的列在其旁边B1:B10(这是重要的,唉!强制性的(见VLOOKUP描述:它必须是1:〜10)),与数字1到10

要根据自己的需要来填充B列就可以使用,像公式

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

然后,将让您的信息的公式VLOOKUP(HLOOKUP如果你的数据数组是水平的)。 它会查找该值在参数矩阵的最左列并返回第2列的匹配值(第三个参数,在我们的例子列B)。 假是要求精确匹配。

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

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

(我仍然在寻找一种更好的方式来真正找到MIN和发现阵列的MAX,但没有成功呢,除了用Ctrl-Shift键输入的公式,这是一个不走。请邮寄回来,如果你找到它)



Answer 4:

另一种完全不同的解决方案,很少有人会喜欢:我们的目标是使用含有所有的匹配,而位掩码一个巨大的数字。 然后,使用算术,你可以找到的最后一场比赛。

免责声明:本解决方案

  • 不雅
  • computationnaly重
  • 将中等大的记录(对我来说〜1015)溢出。 溢出会导致清洁错误(#NUM),并且还可能因过度浮动四舍五入给出一个错误的号码(我还没有看到它,但它仍然是可能的)

您需要具有相同大小的数据集的顺序号的数组(不必是密切虽然)。 如果你的水果是在A1:A10,你可以把Z1的值(1..10):Z10。

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

让我们来看看:

  • SUMPRODUCT会使位掩码包含1S只要您有橙色字
  • IMLOG2(为什么不Excel中有实数的log 2?)将让你的面具的(浮动)的log 2
  • 地板会截断它,结果是位掩码中“最大的指数” 1的

希望你会发现其他的算术运算寻找其他比赛



Answer 5:

让我们假设我们有A1水果名称的水平数组:J1。 对于“苹果”的最后一次出现的列数将是:

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

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

这是同样的想法,作为一个位掩码和序列号的PPC的概念,而是独立发明并以更简洁的方式表达。 :)我没有给它一个很大的压力测试,但我用数以百计的每个实例,这已经足够了,我的项目在多个地方更复杂的公式看不出有什么问题。



文章来源: Excel: Find last value in an array
标签: excel formula