Excel宏比较两个工作表中的两列并插入行值

时间:2014-08-25 12:56:14

标签: excel vba excel-vba excel-2007

我在这里有点绝望。我在一家能源公司工作,我试图将每日能耗值插入四分之一小时值。我尝试通过vlookup函数在没有VBA的情况下这样做,但它没有工作。然后我尝试了非常原始的解决方案"复制/粘贴"但是在不到2个月的时间里花了2个小时后,我发现它是最愚蠢的事情。

所以,问题在于:

表1有我整天的每日消费值,每行代表一天(A列是天,B是月,C是值),总行数是267

工作表2有我的季度小时值,这意味着一年中每天4 * 24个值(A列是日,B是月,C是小时和分钟的时间,D是我想插入每日值的地方),总行数是35137

我想比较两个工作表中的日期值(即A列和B列),只要它们相同,就需要将其值从工作表1中的C列复制到工作表2中的D列。 / p>

我希望我说得够清楚。对于任何帮助,我都会感到难以置信!

2 个答案:

答案 0 :(得分:1)

假设我正确理解了您的问题,您想要的只是Col D Sheet 2 Sheet 1中每个单元格重复的值,其中日期和月份与Sheet 1中的日期和月份相匹配,最快(很多解决方案)我能想到可以实现这一点,就是依靠这样一个事实:你知道每日价值只存在SumIfs()中的一次,所以你可以使用D2功能如下:

假设您的数据从第2行开始,第1行是标题,在Sheet 2的单元格=SUMIFS(Sheet1!C:C,Sheet1!A:A,A2,Sheet1!B:B,B2) 中,请输入以下公式:

Col D

并向下拖动整个Sheet 1

从本质上讲,你说的是:

向我提供Col C Col A所有值的总和,其中A2Col B匹配且B2与我的Sheet 1匹配

现在,由于您只在{{1}}中只有一次日/月组合,这样就可以获得该值。

希望这有道理并做到这一点!

答案 1 :(得分:1)

好的,不确定我是否理解正确,但如果我这样做了 -

日期由Excel存储为双精度值。整数表示当天的开始(恰好是午夜,因此在给定的一天为0:00:00)。 这段时间之后的一切都描述了一天中的小时。 例如,41,876.628将是2014年8月28日,下午3:03。 41,876.000将于2014年8月28日当天(0:00:00)开始。

如果你想比较两个日期是否有相同的年/月/日,但忽略小时/分钟/秒,你需要做的就是将日期向下舍入(!)到最接近的整数。

因此,在您的工作表2上,创建一个包含您输入的特定日期的字段,例如2014年8月25日,下午3:15(需要采用日期格式,而不是字符串)。现在,如果你使用INT(...)函数,其中“...”是对包含日期的单元格的引用,你将得到一个新的日期 - 这与2014年8月25日的开头完全一致,所以在0:00:00。

如果您对第1页上的日期执行相同操作,您将获得可比较的日期值,同样可以在此工作表的每一天开始。

现在您应该可以轻松地从sheet2到sheet1执行VLOOKUP到新创建的列(包含INT(... date ...)函数的列),因为这些值现在可以轻松比较。