我试图以15分钟的增量收集数据,看起来像是以5分钟为增量收集的数据,空格为零。我创建了一个列,其中Julian日期/时间以15分钟为增量(A),一列具有Julian日期/时间,以5分钟为增量(C),15分钟增量数据在B列中。我创建了一个简单的公式检查所有A列是否与C列完全匹配如果为true我需要它返回对应于A列匹配的B列,如果为false则返回0。
这是我到目前为止所拥有的??????是缺少真正的回报公式。返回B列中相应数据的公式是什么?
=IF(ISNUMBER(MATCH(C2,D:D,0)),"?????????","0")
答案 0 :(得分:3)
处理此类查找的常用方法是使用INDEX-MATCH
。您也可以使用VLOOKUP
,但我总是更喜欢INDEX-MATCH
。
范围图片显示C
列中的5分钟时间,以及F
列中的15分钟数据。
C1
中的 公式是INDEX-MATCH
和IFERROR
的组合。 IFERROR
用于处理未找到值的情况并返回您想要的0
。
=IFERROR(INDEX($F$1:$F$11,MATCH(B1,$E$1:$E$11,0)),0)
该公式可以从C1复制到5分钟结束。
答案 1 :(得分:3)
您的示例公式看起来使用了您的叙述所描述的不同列。我将使用我在描述中理解的列作为列。为清晰起见,请参阅下面的示例图片。
时间查找是15 digit precision floating point errors的主要候选者。这是由于时间的基本性质是一天的小数部分以及显示60分钟和24小时所固有的重复小数。这个问题通常通过使用渐进式进展与基准增长来放大。
如果您在A2中有基准时间并希望创建一系列15分钟的增量以填充该列,请不要使用以下内容:
=TIME(0,15,0)+A2 ◄ generates incremental error growth
当您填写该公式时,任何错误都会在您填写时成倍增加。您的基本分钟显示可能不会显示任何明显的错误,但如果它显示为秒,您可能会发现每隔几百行添加或减去额外的秒数。这称为增量误差扩展,其中每个连续行都会增加前一个公式生成的误差。简而言之,如果一列中有这些公式中的一百个,那么第一个中的任何错误都会被最后一个错误乘以100。
通过始终将顺序时间公式基于A2,将误差最小化为a 单一计算。将公式更改为,
=TIME(0,ROW(1:1)*15,0)+A$2 ◄ datum growth based on minutes added to A2
即使使用基准增长公式,您也可能在完全匹配时遇到一些错误。最好将公式包装在MROUND function中,以允许您将返回值四舍五入到指定的倍数;在这种情况下,到最近的第二个。
=MROUND(TIME(0, ROW(1:1)*15,0)+A$2, TIME(0, 0, 1))
向下填写以获得一个渐进的值列,增量为15分钟。您可能看不到显示值的任何差异,但用于查找的原始基础值将完全不同。这个原则被称为基准增量;例如所有累进数字均基于对原始数据的单一计算。
因此,使用A2中的时间值,这些是应该使用的公式。
8:30:00 AM ◄ starting time value in A2
=MROUND(TIME(0, ROW(1:1)*15,0)+A$2, TIME(0, 0, 1)) ◄ in A3 add 15 minutes to A2 (fill down as necessary)
=A2 ◄ starting time value in C2
=MROUND(TIME(0, ROW(1:1)*5,0)+C$2, TIME(0, 0, 1)) ◄ in C3 add 5 minutes to C2 (fill down as necessary)
这些将产生最精确的时间增量,用于完全匹配查找。
现在,您可以应用与VLOOKUP function配对的INDEX function或MATCH function来检索B列中的值。IFERROR function将捕获不匹配并输出 0 而不是#N/A
错误。
D栏中的公式使用INDEX / MATCH对。 D2是,
=IFERROR(INDEX($B:$B, MATCH(C2,$A:$A, 0)), 0)
使用VLOOKUP在E2中有一个替代公式,
=IFERROR(VLOOKUP(C2,$A:$B, 2, FALSE), 0)
警告:TIME function可以应用最多分钟数。这是有符号整数的最大正值或32,767(约为22¾天的分钟数)。
答案 2 :(得分:1)
您可以完全取消查找,只需使用索引函数来引用所需的单元格:
答案 3 :(得分:0)
关于Is a comment warning enough when dealing with potential data loss?和=TIME(0,ROW(1:1)*15,0)+A$2
我提醒说,应用“自由”可能存在丢失数据的风险。可能取决于机器规格等,但试图用该公式填充大部分列我的Excel崩溃(尝试1-1 / 2小时的大部分时间)。我会对其他人的经历感兴趣,部分原因是处理最不重要的数字可能与处理器有关。
在我的机器上,我尝试比较:
=TIME(0,ROW(1:1)*15,0)+A$2
带
=TIME(0,15,0)+B2
超过1,000行(即大约10-1 / 2天的季度小时)并发现差异(计算,因此可能导致进一步的不准确)。主要区别在于后者考虑了日期变化(数字格式中的整数部分),而前者则没有。允许超过1,000个数据点的整数差异,大约有30个不同的数字格式为0.00000000000003
,另外10个左右的数量小得多。
最后一个数据点(第10天上午09:45)是表现出较大差异的数据之一(尽管不是一系列较小差异的累积)。 任何差异都足以导致无法进行完全匹配,但在几秒钟内我估算的差异大约为0.000000002592
,比如〜0.0000026
毫秒或〜{{ 1}}纳秒。
因为在我看来这一天(整数部分)可能很有用,我建议在一个单元格中输入26
并在下一个单元格中输入0
,然后向下拖动以适应系列填充。这没有性能影响,因为单元格内容是值而不是公式。对于最后一个条目,这产生了00:15:00
的差异,即大约是上述的两倍,并且在一些情况下大约为0.00000000000005
,大约78纳秒。
随着四舍五入到第二个,存在相似数量级的差异。但是,使用EXACT对最后一个系列填充结果(使用0.00000000000009
的最后一个结果进行舍入到第二个)的比较将返回“TRUE”。
整列的系列填充花了我大约3秒钟。然后用另一列中的公式将其舍入到一秒钟约12秒。