大数据集中多结果匹配求助:Excel重复加热器ID时间范围判断
解决方案:匹配所有重复加热器ID的时间范围判断
一、Excel公式方案(兼容所有Excel版本)
在K3单元格输入以下公式,然后横向、纵向填充到目标区域即可:
=IF(SUMPRODUCT(($B$3:$B$66=K$2)*($J3>$C$3:$C$66)*($J3<$D$3:$D$66))>0,1,0)
公式说明:
$B$3:$B$66=K$2:遍历B列所有行,标记出与当前列加热器ID匹配的行(匹配为1,不匹配为0)$J3>$C$3:$C$66:标记出J列时间戳大于对应C列开始时间的行$J3<$D$3:$D$66:标记出J列时间戳小于对应D列结束时间的行SUMPRODUCT将三个条件的结果相乘后求和,只要有一行同时满足三个条件,总和就会大于0,此时返回1,否则返回0
如果是Excel 365/2021版本,也可以用更简洁的动态数组公式:
=IF(COUNTIFS($B$3:$B$66,K$2,$C$3:$C$66,"<"&$J3,$D$3:$D$66,">"&$J3)>0,1,0)
二、VBA自定义函数方案
如果需要更灵活的逻辑,或者数据量极大时,可以用自定义函数实现:
- 按下
Alt+F11打开VBA编辑器 - 插入一个新模块,粘贴以下代码:
Function CheckHeaterTime(heaterID As Variant, timestamp As Date, idRange As Range, startTimeRange As Range, endTimeRange As Range) As Integer Dim i As Long CheckHeaterTime = 0 ' 默认返回0 ' 校验输入区域行数一致 If idRange.Rows.Count <> startTimeRange.Rows.Count Or idRange.Rows.Count <> endTimeRange.Rows.Count Then Exit Function End If ' 遍历所有行,检查匹配条件 For i = 1 To idRange.Rows.Count If idRange.Cells(i, 1).Value = heaterID And _ timestamp > startTimeRange.Cells(i, 1).Value And _ timestamp < endTimeRange.Cells(i, 1).Value Then CheckHeaterTime = 1 Exit For ' 找到符合条件的实例后直接退出循环 End If Next i End Function
- 返回Excel,在K3单元格输入以下公式,填充到目标区域:
=CheckHeaterTime(K$2,$J3,$B$3:$B$66,$C$3:$C$66,$D$3:$D$66)
内容的提问来源于stack exchange,提问作者eclecticengineer
相关产品推荐
相关产品推荐

