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-MATCH
和IFERROR
的组合。 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
错误。
我在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.0000026
是0.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秒的公式。