繁体   English   中英

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

[英]Excel: Find last value in an array

我有一个数据集

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

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

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

你可以试试

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

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

您可能想尝试一下,尽管它迫使您制作一个额外的数组,但它会查找第一个匹配项:将您的水果数据放入A1:A10中,并在B1:B10旁边添加一个额外的列(这很重要,可惜强制性的(请参见VLOOKUP描述:必须为?1:?10)),其编号为1到10

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

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

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

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

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

(我仍在寻找一种更好的方法来真正找到一系列结果的MIN和MAX,但除Ctrl-Shift-Enter公式外,其他方法都没有成功,但没有成功。找到后请回发)

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

免责声明:此解决方案是

  • 不雅
  • 计算繁重
  • 将会有大量的大记录溢出(对我来说〜1015)。 溢出会导致清除错误(#NUM),并且由于过多的浮点舍入而可能还会给出错误的数字(我没有观察到,但仍然可能)

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

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

让我们看一下:

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

希望您能找到其他算术运算来查找其他匹配项

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM