【问题标题】:Excel VBA Copying from Various cells from various WorkbooksExcel VBA 从各种工作簿中的各种单元格复制
【发布时间】:2016-11-18 15:31:06
【问题描述】:

在 VBA Excel 中编码需要一些帮助。 所以目前,我有 100 多个表,并且必须从每个区域的许多单独的 Excel 文件中手动将所有数据输入到每个表中。 您可以在此处查看表格图片:https://i.stack.imgur.com/ftLdE.png

我当前的代码仍然依赖于定位要复制的单元格范围,考虑到行/列是否发生变化,这是不可行的。

有没有办法从每个区域的Excel文件中统一获取所有数据并插入?

或者是否可以将标题或表名作为目标,以便自动填写? 如果解决方案如此简单并且以前有人问过,请原谅我。

非常感谢您的帮助。

Sub Extract()
Dim x As Workbook
Dim y As Workbook
Dim OpenSource As String
Dim OpenTarget As String
OpenSource = Application.GetOpenFilename("File Type, *.xlsm")
If OpenSource = "False" Then Exit Sub
OpenTarget = Application.GetOpenFilename("File Type, *.xlsm")
If OpenTarget = "False" Then Exit Sub
'## Open both workbooks first:

Set x = Workbooks.Open(OpenSource) 'Source File 'thisworkbook can implement here?
Set y = Workbooks.Open(OpenTarget) 'Destination File

'Now, transfer values from x to y:
y.Sheets("Data").Range("C16:N16").Value = x.Sheets("Data").Range("C19:N19").Value
y.Sheets("Data").Range("C34:N34").Value = x.Sheets("Data").Range("C37:N37").Value
y.Sheets("Data").Range("C52:N52").Value = x.Sheets("Data").Range("C55:N55").Value
y.Sheets("Data").Range("C70:N70").Value = x.Sheets("Data").Range("C73:N73").Value
y.Sheets("Data").Range("C124:N124").Value = x.Sheets("Data").Range("C127:N127").Value
y.Sheets("Data").Range("C286:N286").Value = x.Sheets("Data").Range("C289:N289").Value

y.Sheets("Data").Range("R88:AC88").Value = x.Sheets("Data").Range("R91:AC91").Value
y.Sheets("Data").Range("R106:AC106").Value = x.Sheets("Data").Range("R109:AC109").Value
y.Sheets("Data").Range("R142:AC142").Value = x.Sheets("Data").Range("R145:AC145").Value
y.Sheets("Data").Range("R160:AC160").Value = x.Sheets("Data").Range("R163:AC163").Value
y.Sheets("Data").Range("R178:AC178").Value = x.Sheets("Data").Range("R181:AC181").Value
y.Sheets("Data").Range("R196:AC196").Value = x.Sheets("Data").Range("R199:AC199").Value
y.Sheets("Data").Range("R214:AC214").Value = x.Sheets("Data").Range("R217:AC217").Value
y.Sheets("Data").Range("R232:AC232").Value = x.Sheets("Data").Range("R235:AC235").Value
y.Sheets("Data").Range("R250:AC250").Value = x.Sheets("Data").Range("R253:AC253").Value
y.Sheets("Data").Range("R268:AC268").Value = x.Sheets("Data").Range("R271:AC271").Value

y.Sheets("Data").Range("AG88:AR88").Value = x.Sheets("Data").Range("AG91:AR91").Value
y.Sheets("Data").Range("AG106:AR106").Value = x.Sheets("Data").Range("A109:AR109").Value
y.Sheets("Data").Range("AG142:AR142").Value = x.Sheets("Data").Range("AG145:AR145").Value
y.Sheets("Data").Range("AG160:AR160").Value = x.Sheets("Data").Range("AG163:AR163").Value
y.Sheets("Data").Range("AG178:AR178").Value = x.Sheets("Data").Range("AG181:AR181").Value
y.Sheets("Data").Range("AG196:AR196").Value = x.Sheets("Data").Range("AG199:AR199").Value
y.Sheets("Data").Range("AG214:AR214").Value = x.Sheets("Data").Range("AG217:AR217").Value
y.Sheets("Data").Range("AG232:AR232").Value = x.Sheets("Data").Range("AG235:AR235").Value
y.Sheets("Data").Range("AG250:AR250").Value = x.Sheets("Data").Range("AG253:AR253").Value
y.Sheets("Data").Range("AG268:AR268").Value = x.Sheets("Data").Range("AG271:AR271").Value


MsgBox ("Done")
End Sub

【问题讨论】:

  • 如果范围基于某些标准,您可以使用它来设置开始和结束行以及开始和结束列。换句话说,电子表格中是否还有其他信息让您关注这些范围?
  • 有什么办法可以上传其中一个文件让我们看看吗?对于另一个项目,我使用的代码会打开选定文件夹中的每个 Excel 文件,并自动为所有这些文件执行相同的操作(即查找信息并将它们复制到主文件)。这可能也适用于你?!
  • @MattCremeens 我能想到的唯一标准是每个区域的标题和月份,所以基本上它都是相同类型的文件,稍后将由我编译。值得关注的是,如果在需要动态扩展范围之后,还要添加其他区域。
  • @InternInNeed 它与我需要的有点相似。为简单起见,文件中有 2 张 Main 和 Region 1。每张表代表 2 个单独的 excel 文件。所以我需要将区域 1 中每个表的总计复制到主表中的行。这里是示例文件的链接drive.google.com/…

标签: vba excel


【解决方案1】:

当然。只要知道起点,就可以动态统计复制行数,修改代码见下:

x.Sheets("Data").Range("C16:N" & Cells(Rows.Count, 14).End(xlUp).Row).Copy Destination:=y.Sheets("Data").Range("C19")

我把 Cells(Rows.Count,14) 放在哪里,14 与 N 列有关。

对其余部分应用相同的逻辑,你应该没问题!让我知道这是如何工作的,因为我还没有测试过:)

【讨论】:

  • 它不起作用,因为我在目标文件上得到了一个空框。让我把代码弄对,所以首先从范围 C16 和列 N 开始,并以同一行 16 中的最后一个填充单元格结束。然后调用复制命令。目标同时从范围 C19 开始?是否有必要指定它也将在 N19 结束?
  • 对不起!请参阅编辑。该范围现在包括“C16:N”。测试和工作:)
  • 谢谢!!!尽管表格未对齐,但它可以工作,但这是一个小问题。不知道为什么..尝试改变 xlUp 和范围但仍然没有结果图片:imgur.com/a/2k1tG
  • @Collin 它实际上是一个表格还是只是格式化的单元格看起来像一个表格?它在我的 excel 上运行良好,没有发生偏移
  • 是的,它是一张桌子。不知道为什么会产生偏移。
【解决方案2】:

我认为我们的目的地和来源也是错误的。 如何将代码反转?例如。源应来自源文件的 C19:N19 行,并复制到目标文件的 C14:N14 行。

Sub Extract()
Dim x As Workbook
Dim y As Workbook
Dim OpenSource As String
Dim OpenTarget As String
OpenSource = Application.GetOpenFilename("File Type, *.xlsm")
If OpenSource = "False" Then Exit Sub
OpenTarget = Application.GetOpenFilename("File Type, *.xlsm")
If OpenTarget = "False" Then Exit Sub


Set x = Workbooks.Open(OpenSource) 'Source File
Set y = Workbooks.Open(OpenTarget) 'Destination File

x.Sheets("Data").Range("C14:N" & Cells(Rows.Count, 14).End(xlUp).Row).Copy Destination:=y.Sheets("Data").Range("C19")

MsgBox ("Done")
End Sub

【讨论】:

  • 我已经让它工作到正确的行,但我不能让它只粘贴值。这里有什么帮助吗? x.Sheets("Data").Range("C19").Copy Destination:=y.Sheets("Data").Range("C14:N" & Cells(Rows.Count, 14).End(xlUp) .Column).PasteSpecial xlPasteValues
  • 啊,是的,我只是查看了原始代码,目标行和源行不同。 C14不应该是C16吗?作为范围?
  • 并粘贴值,只需复制新粘贴的范围,然后粘贴值即可:)
猜你喜欢
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多