search列A以匹配列C中的数字(如果为True),返回列B(如果为false)则返回“0”

我试图以15分钟的增量收集数据,看起来像是以5分钟的增量收集的数据,空格为零。 我已经创build了Juliandate/时间以15分钟为增量(A),Juliandate/时间以5分钟为增量(C)创build了一列,15分钟增量数据在B列创build了一个简单的公式检查所有的列A与列C完全匹配,如果为true我需要它返回列B对应于列A中的匹配,如果为false,则返回0。

这是我到目前为止与?????? 作为失踪的真实回报公式。 在B列中返回相应数据的公式是什么?

=IF(ISNUMBER(MATCH(C2,D:D,0)),"?????????","0") 

处理这种查找的常用方法是使用INDEX-MATCH 。 你也可以使用VLOOKUP但我总是喜欢INDEX-MATCH

范围的图片显示列C中的5分钟时间,列C中的15分钟的数据。

显示范围

C1中的公式INDEX-MATCHIFERROR的组合。 IFERROR用于处理未find值的情况并返回您想要的值。

 =IFERROR(INDEX($F$1:$F$11,MATCH(B1,$E$1:$E$11,0)),0) 

该公式可以从C1复制到5分钟时间的结尾。

您的示例公式看起来像使用叙述描述的不同列。 我将使用我的理解从你的描述作为专栏。 为清晰起见,请参阅下面的示例图片

时间查找是15位精度浮点错误的主要候选对象。 这是由于时间的基本性质是一天的小数部分,并且显示60分钟和24小时所固有的重复小数。 这个问题通常使用递增级数与基准增长来放大。

如果您在A2中有一个基准时间,并希望从中创build一系列15分钟的增量以填充列,请不要使用如下所示的内容:

 =TIME(0,15,0)+A2 ◄ generates incremental error growth 

当您填写该公式时,任何错误都会在您填写时相乘。 基本的分钟显示可能不会显示任何明显的错误,但是如果显示为秒,则可能会发现每隔几百行就会增加或减less一秒。 这就是所谓的增量式错误扩展,其中每个连续的行增加了前面公式所产生的错误。 简而言之,如果列中有上百个这样的公式,则第一个中的任何错误都会乘以100。

通过总是以A2的连续时间公式为基础,误差最小化为一次计算。 改变公式到类似的东西,

 =TIME(0,ROW(1:1)*15,0)+A$2 ◄ datum growth based on minutes added to A2 

即使有一个数据增长公式,你可能在精确匹配上有一些错误。 最好在MROUND函数中包装公式,以便将返回的值四舍五入为指定的倍数; 在这种情况下到最近的秒钟。

 =MROUND(TIME(0, ROW(1:1)*15,0)+A$2, TIME(0, 0, 1)) 

填写下来,以15分钟的增量获得一个渐进的值列。 您可能看不到显示值有任何差异,但用于查找的原始基础值将会大不相同。 这个原理被称为基准增量(Datum Incrementing)。 例如,所有的累进数字都是基于对原始数据的单一计算。

所以在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函数或与MATCH 函数配对的INDEX函数来检索B列中的值.IFERROR函数将捕获不匹配项,并输出0而不是#N/A错误。

Iime增量为基准

我在D列中的公式使用INDEX / MATCH对。 D2是,

 =IFERROR(INDEX($B:$B, MATCH(C2,$A:$A, 0)), 0) 

E2中有一个使用VLOOKUP的替代公式,

 =IFERROR(VLOOKUP(C2,$A:$B, 2, FALSE), 0) 

警告: TIMEfunction可以应用的最大分钟数。 这是一个有符号整数的最大正值或32,767(约22¾天的价值分钟)。

您可以完全消除查找,只需使用索引函数来引用所需的单元格即可:

式

关于处理潜在数据丢失时是否有足够的评论警告? 和=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 

超过1000行(即大约10-1 / 2个半小时),并发现差异(计算,所以可能是进一步不准确的来源)。 主要区别在于后者占一天的变化(数字格式的整数部分),而前者不。 允许超过1,000个数据点的整数差异大约有30个差异0.00000000000003 ,在数字格式,另有10个左右的数量less得多。

最后一个数据点(第10天上午09:45)是其中一个显示较大差异的数据点(尽pipe不是一系列较小差异的累积)。 任何差异都足以让一个精确的匹配失败,但是在我看来, 0.00000260.000000002592秒,比如0.0000026毫秒或者26纳秒。

因为在我看来,这一天(整数部分)很可能是有用的,所以我会build议通过在一个单元格中input0和在下一个00:15:00系列填充,拖动以适应。 这没有性能影响,因为单元格内容是值而不是公式。 对于最后一个条目来说,这产生了0.00000000000005的差异,即大约是以上的两倍,并且在一些情况下多达0.00000000000009 ,大约78纳秒。

随着第二个四舍五入有一个类似的数量级差异。 然而,比较最后一个系列的填充结果,舍入到第二个,最后的结果是=MROUND(TIME(0, ROW(1:1)*15,0)+A$2, TIME(0, 0, 1))使用EXACT ,返回“TRUE”。

整个专栏的系列填充花了我大约3秒钟。 然后四舍五入到另一列大约12秒的公式。