将多个特定单元格数据复制/导出/输出到新电子表格

时间:2015-09-12 12:13:21

标签: excel excel-vba excel-2010 vba

我有一个大型的Excel电子表格,已经过几年的定制和扩充(有很多工作表),我想从中提取特定的数据,并按照严格的格式将这些数据插入到新的电子表格中

第二个较新的电子表格是较大和较旧电子表格的子集,但第二个电子表格中的数据必须遵循严格的格式 - 没有标签或标题,只有列和行中的数据,从单元格A1开始,然后从在那里,还有多个工作表。

如何从原始电子表格中的特定单元格中获取数据,并通过宏或其他机制以编程方式将它们插入到第二个较新的电子表格中,这样我只需单击此“宏按钮”即可获得数据。转移?较旧的较大电子表格中的数据不一定是整行或列(尽管可能是这样),但也可能只是一个必须放入较新电子表格的特定单元格中的单个单元格。

2 个答案:

答案 0 :(得分:0)

一个非常简单的程序,您可以在其中选择要复制的文件和要复制的文件以及范围。它为您提供简单的灵活性。如果您想复制单个单元格,请提及"A10:A10"

Sub copyrange()
   Dim w1 As Workbook
   Dim w2 As Workbook

  '## Open both workbooks first:
   Set w1 = Workbooks.Open(" path to copying book ")
   Set w2 = Workbooks.Open(" path to destination book ")

   'Now, copy what you want from w1:
    w1.Sheets("name of copying sheet").Range("X1:Y10").Copy

   'Now, paste to w2 worksheet:
    w2.Sheets("sheetname").Range("A2").PasteSpecial

  'Close w1:
   w1.Close

End Sub

答案 1 :(得分:0)

我将您的问题解释为意味着源工作簿中有大量单元格和范围要移动到目标工作簿。尝试将数百个复制语句更正是一项非常困难的任务。还有一个问题是,工作簿的所有者知道要去哪里,必须记录这个以供程序员实现。这增加了工作总量,增加了误传的机会。

我发现成功的一种技术是将副本宏放在第三个工作簿中。第三个工作簿包含指定所有副本的工作表。例如

|     A     |     B   |     C     |     D   |
| ------ Source ----- | --- Destination --- |
| Worksheet |  Range  | Worksheet |   Cell  |

对于每个数据行,列A和B标识源工作簿中的范围,而列C和D标识目标工作表中范围的左上角单元格。

这项技术的优点包括:

  • 任何Excel用户都可以理解格式;它不需要任何编程技巧。
  • 如果有多个用户参与指定目标工作簿,则每个用户都可以独立开发他/她的规范部分。
  • 需要最少的代码来“遵守”这份说明清单。

代码要执行的任务是:

  • 开源工作簿。
  • 打开空目标工作簿。
  • 查找最后一行说明。
  • 对于每一行指令:将列A和B定义的范围复制到由列C和D定义的单元格。
  • 使用保存
  • 关闭目标工作簿
  • 关闭源工作簿而不保存

目标工作簿的副本可以传递给所有者以供批准。任何错误都需要更新指令列表并重新运行宏。可能需要多个周期才能获得所需的结果,但每个周期都很容易管理。

上面的表格是我曾经实施的最简单的,但更复杂的版本是可能的例如:

 |     A     |     B   |     C     |     D   |
1| ------ Source ----- | --- Destination --- |
2| Worksheet |  Range  | Worksheet |   Cell  |
3|Sheet1     |A1:T230  |Data       |A1       |
4|Sheet2     |A1:T150  |Data       |A?       |
5|Sheet1     |A1:T150  |Data       |A1       |
6|Sheet2     |A1:X150  |Data       |?1       |

在第4行中,问号表示目标是最后一次复制后的下一个空闲行。当组合几个小表时这非常方便,因为没有必要计算哪一行是下一行。在第6行中,目标是下一个空闲列。

如果不清楚重建的复杂性,就无法建议你应该采用这种技术。您需要检查所有类型的副本,并确定指定这些副本的最简单方法,而不会使编程太困难。