如何使用Excel VBA从两个工作簿中复制特定单元格并将它们合并为一个?

时间:2015-06-09 21:38:01

标签: excel vba excel-vba

我有两本excel工作簿,我试图从中读取。我需要从第一列中的列中读取,并将该字段与第二个工作簿中的字段进行比较。如果匹配,我想将原始行复制到新的excel工作簿,并将该名称附加到另一列的一部分。此外,如果该行中的另一列已填满,我需要将原始行再次复制到新工作簿中,并附加该名称。每排最多会发生20次,但并非总是如此。

基本上,我需要做这样的事情:

Workbook A:

Name         OtherData1     OtherData2
--------     ----------     ----------
Railroad     Data           Data
MailRoute    Data           Data
BoatPath     Data           Data

Workbook B:

Name          rtuTopic[1]   rtuTopic[2]   [.....]   rtuTopic[20]
--------      --------      --------                --------
Railroad      Route_01      Route_05                Route_21
MailRoute     Route_12      NULL                    NULL
BoatPath      Route_01      Route_15                NULL

Workbook C (the result I want)

Name            OtherData1     OtherData2     rtuTopic
--------        ----------     ----------     --------
Railroad_01     Data           Data           Route_01
Railroad_05     Data           Data           Route_05
...........
Railroad_21     Data           Data           Route_21
MailRoute_12    Data           Data           Route_12
BoatPath_01     Data           Data           Route_01
BoatPath_15     Data           Data           Route_15

我需要追加的列并不方便彼此相邻。他们被5或6个其他列分开,给予或接受,我不知道从哪里开始。我四处搜索,看到如何将整张纸从一个工作簿复制到另一个工作簿,但我没有看到如何真正专门地挖掘和复制我需要的方式。

1 个答案:

答案 0 :(得分:0)

看起来你似乎要求为你编写一个解决方案,而不是问一个特定的问题,但这里有一些指示可以帮助你:

假设其他工作簿已经打开,您可以使用工作簿列表参考其他工作簿,例如。

Dim workBookA As Workbook
Dim workBookB As Workbook
Dim workBookC As Workbook

Set workBookA = Workbooks("Workbook A")
Set workBookB = Workbooks("Workbook B")
Set workBookC = Workbooks("Workbook C")

可以使用工作表的名称引用这些工作簿中的工作表,即如果要在工作簿A上使用名为“Main”的工作表,则可以使用:

workBookA.Sheets("Main").Activate

将工作簿C中的一列复制到工作簿C上的一个“报告”可以像下面这样完成:

workBookA.Sheets("Main").Range("a1", workBookA.Sheets("Main").Range("a1").End(xlDown)).Copy
workBookC.Sheets("Report").Range("a1").PasteSpecial

或者如果这更容易理解

workBookA.Sheets("Main").Activate
Range("a1", Range("a1").End(xlDown)).Copy
workBookC.Sheets("Report").Activate
Range("a1").PasteSpecial
祝你好运