跪求 各位大侠:EXCEL中如果在一列数据向上查找最近一个相同值,然后返回两数值间隔的行数?用什么函数

如图所示:
6 9 13 13 17 9 12 20 12 18 18 16 2 18 13 18 6 17 1391317 26 420 14我在最下面的20旁边的空格里填入它与上一个20相隔的行数是14,最下面的6旁边的空格里填入它与上一个6相隔的行数是4,虽然它上面还有6,最下面的17旁边填入它与上一个17相隔的行数是2,虽然上面还有17,这用什么函数表达,怎么表达?
6 9 13 13 17 9 12 20 12 18 18 16 2 18 13 18 6 17 9 17 6 20 我在最下面的20旁边的空格里填入它与上一个20相隔的行数是14,最下面的6旁边的空格里填入它与上一个6相隔的行数是4,虽然它上面还有6,最下面的17旁边填入它与上一个17相隔的行数是2,虽然上面还有17,这用什么函数表达,怎么表达?

第1个回答  2012-10-11
假设那些原始数据在A1:A100中,B1中反正不会有相隔的内容,从B2开始吧,B2中输入
=IF(COUNTIF(A$1:A2,A2)<2,"",ROW()-LOOKUP(1,0/(A$1:A1=A2),ROW($1:1)))
用自动填充柄下拉。追问

这能告诉我什么意思吗

追答

先用大白话来说一下,如果本单元格和本单元格之上,本单元格的个数小于2(意思就是本单元格的内容有没有重复,小于2的必然是1,就是首次出现的),返回空,否则找寻上面最后一次出现的行号,用本单元格的行号去减它,就是你要的结果。
COUNTIF(A$1:A2,A2)<2
中,COUNTIF是条件计数,COUNTIF(A$1:A2,A2)的意思就是在A1:A2中与A2相同的有几个,如果A1为1,A2为2,那么COUNTIF(A$1:A2,A2)=COUNTIF({1;2},2)=1,就是与2相同的为一个,那么小于2这个条件符合,返回IF函数第二参数,就是"",空格的意思,因为A$1:A2,第一个单元格被固定住了,下拉到B3时,它会变成countif(A$1:A3,A3),形成动态计算。
LOOKUP(1,0/(A$1:A1=A2),ROW($1:1))
当COUNTIF不小于2,就是有重复时,执行这段,这个的意思是就是在本单元格之上找寻符合等于本单元格的,最后一个的行号,如果是第四行,就返回4,ROW()就是返回本单元格的行号,如果本单元格为B7,就是7,7-4就是3,最后的结果就是3行了。
看来你很想学习函数,告诉你一个看懂人家函数的办法,用鼠标在编辑栏中拖黑公式的一段或部分,按F9就是查看这段函数的结果,按CTRL+Z或ESC返回,想看哪段拖黑哪段,比如COUNTIF(A$1:A2,A2)拆解完毕了就看明白了。

本回答被提问者采纳
第2个回答  2012-10-11
假定,你把这些数据输入到了A列1-N行
则:
在B1格输入, =COUNTIF(A$1:A1,A1) 下拉填充至第N行
在C1格输入, =ROW() 下拉填充至第N行
在D2格输入, =IF(B2>1,C2-SUMIFS(C$1:C1,A$1:A1,A2,B$1:B1,B2-1),-1) ,下拉填充至第N行

在D列中,-1表示前面没有相同数据,非-1表示的就是举例最近的相同数值的行距
第3个回答  2012-10-11
给你一个VBA

Sub test()
Dim i%, k%
Range("b:b").ClearContents
For i = Range("a65536").End(xlUp).Row To 2 Step -1
If IsError(Application.Match(Cells(i, 1), Range(Cells(1, 1), Cells(i - 1, 1)), 0)) = False Then
Cells(i, 2) = i - Application.Match(Cells(i, 1), Range(Cells(1, 1), Cells(i - 1, 1)), 0) - 1
Else
Cells(i, 2) = "无相同值"
End If
Next
End Sub
第4个回答  2012-10-11
这个问题用VBA更好解决追问

VBA更不会了

追答

如你的数据在A列
用公式,那么在B2输入公式如下
=IF(COUNTIF(A$1:A2,A2)<2,"",ROW()-LOOKUP(1,0/(A$1:A1=A2),ROW($1:1))-1)

=IF(COUNTIF(A$1:A2,A2)<2,"",ROW(A1)-LOOKUP(1,0/($A$1:A1=A2),ROW($1:1)))

公式下拉完成

如果用VBA处理,代码如下

Sub test()
Dim i&, x&, y&, r&
r = Range("A65536").End(xlUp).Row
For x = r To 2 Step -1
For y = x - 1 To 1 Step -1
If Cells(y, 1) = Cells(x, 1) Then Cells(x, 2) = x - y - 1: Exit For
Next y
Next x
End Sub
运行这个宏即得到结果