我有一个数据集
> A b c d...AA,BB
>1,2,3,4
> apple apple apple
> orange pear pear apple pear
> grapefruit,grape, grape,grape
有没有办法通过上述公式在Excel会自动找到阵列中的特定水果的最终occurence?
我有一个数据集
> A b c d...AA,BB
>1,2,3,4
> apple apple apple
> orange pear pear apple pear
> grapefruit,grape, grape,grape
有没有办法通过上述公式在Excel会自动找到阵列中的特定水果的最终occurence?
您需要使用counta
来告诉你有多少项目是如何数组和index
,以获得最后一个元素的值。
你可以试试
=INDEX(1:1,0,COUNTA(1:1))
这将找到1中的最后一个值:1阵列。
写一个用户定义的函数从最后一个单元格向后搜索数据
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
你可能想试试这个,虽然它强迫你做一个额外的阵列,它查找第一次出现:把你的水果数据在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键输入的公式,这是一个不走。请邮寄回来,如果你找到它)
另一种完全不同的解决方案,很少有人会喜欢:我们的目标是使用含有所有的匹配,而位掩码一个巨大的数字。 然后,使用算术,你可以找到的最后一场比赛。
免责声明:本解决方案
您需要具有相同大小的数据集的顺序号的数组(不必是密切虽然)。 如果你的水果是在A1:A10,你可以把Z1的值(1..10):Z10。
= FLOOR(IMLOG2(
SUMPRODUCT( (A1:A10 = "orange")*1 ; Z1:Z10
) ; 1)
让我们来看看:
希望你会发现其他的算术运算寻找其他比赛
让我们假设我们有A1水果名称的水平数组:J1。 对于“苹果”的最后一次出现的列数将是:
{=MAX(COLUMN(A1:J1)*(A1:J1="apple"))}
不要忘记按Ctrl + Shift + Enter键 ,它是一个数组公式。
这是同样的想法,作为一个位掩码和序列号的PPC的概念,而是独立发明并以更简洁的方式表达。 :)我没有给它一个很大的压力测试,但我用数以百计的每个实例,这已经足够了,我的项目在多个地方更复杂的公式看不出有什么问题。