Excel宏比较两个工作表中的两列并插入行值
Posted
技术标签:
【中文标题】Excel宏比较两个工作表中的两列并插入行值【英文标题】:Excel Macro compare two columns in two sheets and insert row values 【发布时间】:2014-08-25 12:56:13 【问题描述】:我有点绝望了。我在一家能源公司工作,我正在尝试将每日能源消耗值插入每季度的值。我尝试通过 vlookup 函数在没有 VBA 的情况下这样做,但它没有用。然后我尝试了非常原始的“复制/粘贴”解决方案,但在不到 2 个月的时间里花了 2 个小时后,我发现这是最愚蠢的做法。
那么,问题来了:
表1有我一整年的每日消费值,每一行代表一天(A列是天,B是月,C是数值),总行数是267
表 2 有我的季度小时值,这意味着全年每天 4*24 个值(A 列是天,B 是月,C 是以小时和分钟为单位的时间,D 是我要插入每日值的位置),总行数为 35137
我想比较两张表中的日期值(即 A 列和 B 列),只要它们相同,它需要将其值从表 1 中的 C 列复制到表 2 中的 D 列。
我希望我说得足够清楚。我会非常感谢任何帮助!
【问题讨论】:
只是为了理解,表 2 的 D 列中的值对于当天的所有值是否相同? 哇!有效!!!非常感谢你们!!! 很高兴它成功了!! - 请务必标记解决方案,以便其他人在遇到类似问题时知道它有效.... 【参考方案1】:假设我正确理解了您的问题,并且您想要的只是 Sheet 2
的 Col D
中每个单元格重复的值,其中日期和月份与 Sheet 1
中的日期和月份匹配,这是最快的(在许多解决方案中)我认为可以实现这一点的方法是依赖于您知道每日值仅在 Sheet 1
中存在 1 次的事实,因此您可以按如下方式使用 SumIfs()
函数:
假设您的数据从第 2 行开始,第 1 行是标题,在 Sheet 2
的单元格 D2
中,输入以下公式:
=SUMIFS(Sheet1!C:C,Sheet1!A:A,A2,Sheet1!B:B,B2)
并向下拖动整个Col D
本质上,你是在说:
给我来自Sheet 1
Col C
的所有值的总和,其中Col A
匹配我的A2
并且Col B
匹配我的B2
。
现在,由于您在 Sheet 1
中只有一次日/月组合,这将为您提供该值。
希望这是有道理的,并且可以解决问题!
【讨论】:
【参考方案2】:好的,不确定我是否理解正确,但如果我理解了 -
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 到新创建的列(包含 INT(...date...) 函数的列)执行 VLOOKUP,因为现在可以轻松比较这些值。
【讨论】:
以上是关于Excel宏比较两个工作表中的两列并插入行值的主要内容,如果未能解决你的问题,请参考以下文章
两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容
VBA选择工作表中的所有列并自动调整Excel 2010中的所有列宽度