【问题标题】:Copy multiple columns into separate new workbooks using VBA使用 VBA 将多个列复制到单独的新工作簿中
【发布时间】:2021-02-04 05:42:44
【问题描述】:

我已经能够编写一个执行以下操作的宏:

  • 将 A 列复制到 B 列,格式为“mm-dd-yyyy”。

  • 将 A 列复制到 C 列,格式为“h:mm”。

现在,我需要执行以下操作,但我不知道如何...

  • 将新创建的列 B、C 和新列右侧的每个单独的列复制到各自的工作簿中。我希望根据“当前工作表标题”和每个单独的第 2 行名称来命名工作簿。例如,我附上了一张工作簿数据的图片以及一张最终产品的样子。

我认为代码必须执行以下操作:创建一个基于范围的列变量 X 和第 2 行。然后声明对于每一列 X,如果第 2 行包含一个值,则复制 B 列、C 列和当前X 列。然后将 (3) 列(B、C 和列变量 X)粘贴到新工作簿中,并根据“当前工作表标题 + 当前 X 列第 2 行的单元格名称”为工作簿命名。

感谢任何人的帮助,如果我说的内容令人困惑,请告诉我,我会尽力解决。

图片:

数据: Data Image

最终产品 1: Final Product Image 1

最终产品2:Final Product Image 2

当前宏:

Sub Time_Series()

Dim CurrentSheet As Worksheet

 With CurrentSheet
      Range("A:A").Copy
      Range("B:C").Insert
      Range("B:B").NumberFormat = "mm-dd-yyyy;@"
      Range("C:C").NumberFormat = "h:MM;@"

 End With

End Sub

【问题讨论】:

  • 我认为只是格式化整个列的 FYI 会占用大量文件大小,因此您可能需要更具体地定义要设置格式的范围,例如Range(Range("B2"), Range("B2").End(xlDown)).NumberFormat = "mm-dd-yyyy;@",格式化也不会删除未使用的日期部分,因此,如果您排序/分组等,您通过 for at 掩码看到的只是实际单元格内容的一部分。
  • 在解决问题时,您的逻辑似乎很可靠,请尝试实施。 set ws = Thisworkbook.worksheets.add 将为您创建一个新工作簿,使用 Range(Range("B2"), Range("B2").End(xlDown)).copy destination:= ws.range("a1") 之类的逻辑将影响复制
  • 我无法理解,因为您所解释的内容与图片显示的内容不符。仅举一个例子,您谈到将 A 列的日期复制/粘贴到 B 列中,但在图像中,我看到您将它们粘贴到另一个工作表的 A 列中。你知道工作表和工作簿的区别吗? .. 解释时要小心,如果你想让我们理解,每一个字都很重要。简化并消除所有废话。
  • 只是想说我感谢大家的时间。理想情况下,我希望能够将数据粘贴到新工作簿中,而不是工作表中,因为稍后我会将各个工作簿导入到另一个程序中。前两个步骤创建列 B 和 C。目标是然后将列 B、C 和变量 X 复制到每个变量 X 的新单独工作簿中。示例将列 (B、C、D) 复制到新工作簿中并保存新的工作簿工作簿为“当前工作表标题-DMA-1”。下一个示例将 Column (B,C,E) 复制到名为“Current Sheet Title-DMA-2”的新工作簿中。以此类推。

标签: excel vba


【解决方案1】:

我认为您所说的是将数据从工作表复制到工作表,对吗?工作簿是指谨慎的 Excel 文件。工作簿包含 1 个或多个工作表(这些是底部的选项卡)。

我建议您在工作表的列中手动设置文本格式。突出显示您之后的列(您可以单击列标题以选择整个列),然后右键单击并选择格式单元格。您可以通过选择正确的类别来使用特定格式格式化单元格。例如,Date 有许多不同的选项可用。如果它们都不适合您,请选择自定义,然后输入您要使用的格式。时间相同。

如果我理解正确,您希望将两个新列复制到它们自己的工作表中。如果您只有一定数量的附加列,则应手动将相应的工作表插入工作簿。它可以动态完成,但是手动完成可以让您命名工作表,并且确定哪个工作表处于活动状态的繁琐工作要少得多。

假设您有一个名为 NewSheet 的工作表,并且复制和插入命令有效(我还没有测试过它们)...

是否像在示例代码中那样选择范围...

CurrentSheet.Activate  'Make sure you've got the sheet in focus
CurrentSheet.Range("A:A").Copy  'Grabs your column data

现在,翻到另一张纸。

NewSheet.Activate  'this brings the other sheet into focus
NewSheet.Range("A:A").Insert  'Inserts whatever you have in the clipboard from your previous copy

如果您尚未创建工作表(选项卡),则必须生成一个新工作表,然后使用不同的参考来获取它们以进行编辑。比如……

worksheets("NewSheet").range("A:A").Insert  'Where NewSheet is the name shown on the tab at the bottom of the Spreadsheet

另外,要记住一件事,Excel 的宏记录器非常适合记录您想做的事情。只需知道您想做什么,按下记录按钮,然后复制并粘贴代码即可。宏记录器将它生成的代码记录到一个模块中。然后你可以抓住它并根据需要进行修改。

【讨论】:

  • 我在其他 cmets 下发表了回复,澄清了我的意思。但我需要将数据复制到单独的工作簿中,因为这些工作簿随后将被导入另一个程序。这可能吗?
  • 是的。您可以手动或使用宏创建新文件(工作簿)。只需使用宏记录器记录该过程。然后,您可以根据需要修改它创建的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2020-12-28
相关资源
最近更新 更多