2016-12-28 205 views
-2

我正在尝试创建代码,以帮助我实现正确的格式。我想要的只是将员工(EE)整行并粘贴到新工作表中,然后将第二部分(ER)值与同一员工匹配。换句话说,如果员工代表同一雇员支付了100(Pen EE(Tal))和雇主200(Pen ERS(Tal))的养老金供款。然后,工作表应该看起来像列A =人员否,列B =员工姓名,列C = ID号码,列D = PenPay,列E =笔EE(Tal)和列F =笔ER(Tal)和G =总计(笔EE +笔ER值),正如示例选项卡中所示。操作标准数据库

我希望这是有道理的。到目前为止,我尝试了几种方法,但没有运气。感谢大家的帮助。

+0

您是否看过通过ADODB在VBA中对Excel的SQL支持?这可能是最干净的解决方案。 –

+0

嗨,不,我没有。你能否发布链接,以便我可以看看它。我在VBA编码处理方面相当新颖。 – Mouctar

回答

1

从你的问题描述,我想我可以破译你正在使用Excel。

我看到解决您的问题三种基本方法:

最简单的方法是不使用VBA的所有功能,转而使用工作簿功能INDEXMATCH。后者返回在搜索范围内找到精确匹配的行或列,这必须是一维的。 (完全匹配实际上需要搜索选项0.)函数INDEX返回范围中给定行和列处的值。将两者结合起来,您可以更灵活地查看VLOOKUPHLOOKUP,,您可以使用它查找给定员工的第二个表中的值。 (MATCH如果没有发现匹配返回一个错误N/A

第二种方法是使用Excel对象模型在VBA。您可以使用范围的Find方法在范围中搜索值。这将返回找到匹配的单元格,如果不匹配,则返回Nothing。如果搜索结果不是Nothing,则可以使用EntireRow属性获取整行,并使用Cells属性选择行中的单元格。

最后,您可以通过ADODB使用SQL for Excel的支持。有关如何执行此操作的说明,您可以在SO上查看此Microsoft page和这个旧的question。如果您知道如何编写SQL查询,这应该使您能够通过SQL解决您的问题。

+0

@Mouctar我同意。给出足够的数据,使用INDEX和MATCH可能会很慢。在这种情况下,你可能想看看第三种方法。 SQL支持使用更高效的连接算法来匹配您的数据。 –

+0

你好,谢谢你的建议。但是,我目前使用索引和匹配来获得正确的格式,并且需要我永远做到这一点,因为我有70多个退休金计划和约7000名员工,所以这个选项适用于小报告,但不是大报告。第二个建议可能是更好的选择,但我很努力甚至想从哪里开始,因为我对VBA编码颇为新颖。最后的建议可能也不错,但这是我第一次听说它,所以这会让我永远明白,不要介意编写可以完成这项工作的代码。 – Mouctar

+0

任何想法,我可以找到关于SQL的学习材料,我只是想让我的工作更好,因为它可以是有压力的,因为截止日期很短。请任何帮助将不胜感激 – Mouctar