Exce中,有AB两列数据,如果A 列有相同数据,就返回A列对应B列数据,如果没有,数据在A列相近对应B列数据平均

如题所述

这个有两种方式可以解决,一种是函数IF搭配VLOOKUP,一种是用VBA

公式法:请在指定列输入公式:

=IF(ISNA(IF(ISNA(VLOOKUP(C6,$A$1:$B$15,2,FALSE)),(VLOOKUP(MAX(IF($A$2:$A$16<C6,$A$2:$A$16)),$A$2:$B$16,2,FALSE)+VLOOKUP(MIN(IF($A$2:$A$16>C6,$A$2:$A$16)),$A$2:$B$16,2,FALSE))/2,VLOOKUP(C6,$A$1:$B$16,2,FALSE))),"",IF(ISNA(VLOOKUP(C6,$A$1:$B$15,2,FALSE)),(VLOOKUP(MAX(IF($A$2:$A$16<C6,$A$2:$A$16)),$A$2:$B$16,2,FALSE)+VLOOKUP(MIN(IF($A$2:$A$16>C6,$A$2:$A$16)),$A$2:$B$16,2,FALSE))/2,VLOOKUP(C6,$A$1:$B$16,2,FALSE)))

因为使用了函数的数组功能,所以需要按ctrl+shift+回车确定

然后向下拖拽即可。以上公式默认区域为$A$2:$B$16,如果区域扩大,需要自己更改该区域。不过一定记得加$符号,否则会串行。

VBA方法比较简单:

按ALT+F11打开VBA编辑器,插入--模块

输入代码:

Public Sub aa()
x = Range("A65536").End(xlUp).Row
For i = 2 To x
  a = Cells(i, 3)   
  For j = 2 To x
    If Cells(j, 1) = a Then                 '如果找到相同的
      Cells(i, 7) = Cells(j, 2)                 '将结果输入第7列
    ElseIf Cells(j, 1) > a And Cells(j + 1, 1) < a Then  '如果没有找到相同的数值,比较大小
      Cells(i, 7) = (Cells(j, 2) + Cells(j + 1, 2)) / 2   '将平均数输入第7列
    End If
  Next
Next
End Sub

然后按F5执行即可。

温馨提示:答案为网友推荐,仅供参考
相似回答