2011-12-19 60 views
-1

目前,我正在努力与以下内容: 我有两个Excel文件。一个文件包含大量数据,另一个用于评估数据。 现在我需要高效地将数据从源文件复制到目标工作簿。源datapattern看起来类似于以下内容:Excel VBA - 如何有效地将多个单元格从一个文件复制到另一个文件?

x A B C D E F G H I 
1 Oct bla bla bla bla bla bla bla bla 
2    75    66 
3 Nov bla bla IMT Frm bla bla IMT Frm 

当喇嘛代表无趣的数据,A列表示月份(重要)和IMT是非常重要的数据,这就是为什么我这样做的原因。此外,Frm表示单元格包含公式,而不是值,并且必须进行保存/恢复。 此外,目标文件的单元格格式必须保留(可以使用.PasteSpecial来实现)。

目标工作簿看起来完全一样,省略了半空行“2”。

每一行都有大约10个有价值的条目。我如何才能最有效地将数据复制到第二个工作簿中? 请让我知道,如果有更多的信息,我可以提供。 谢谢你的时间!

编辑:example screenshot 说明:该屏幕截图显示了源表单。重要的信息是在ss中选择的信息。工作表像这样继续向右(直到BF)。我需要复制每六个条目。目标工作表看起来完全相同(省略半空中间行),除了所需的信息(在源代码中是公式,但它需要是目标中的值)。 非常感谢您的帮助!

回答

1

下面是一个示例代码,将让你在正确的方向前进:

Public Sub CopyValues() 

Dim wb_src As Workbook, wb_dst As Workbook 
Dim ws_src As Worksheet, ws_dst As Worksheet 

Set wb_src = Workbooks.Open("....") 
Set wb_dst = Workbooks.Add() 

Set ws_src = wb_src.Sheets(1) 
Set ws_dst = wb_dst.Sheets(1) 

Dim data() As Variant 
Dim r_src As Range 
Dim r_dst As Range 

Set r_src = ws_src.Range("B4").Resize(1000, 100) 
Set r_dst = ws_dst.Range("B4").Resize(1000, 100) 

data = r_src.Value2 
r_dst.Value2 = data 

End Sub 
0

试试这个:

Option Explicit 
Sub test() 
    Dim wb As Workbook, wb2 As Workbook 
    Dim ws As Worksheet 
    Dim vFile As Variant 

    'Set source workbook 
    Set wb = ActiveWorkbook 
    'Open the target workbook 
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
     1, "Select One File To Open", , False) 
    'if the user didn't select a file, exit sub 
    If TypeName(vFile) = "Boolean" Then Exit Sub 
    Workbooks.Open vFile 
    'Set targetworkbook 
    Set wb2 = ActiveWorkbook 

    'Copy data from a range in the first workbook to another range in the other workbook 
    wb2.Worksheets("Sheet2").Range("C3:D4").Value = wb.Worksheets("Sheet1").Range("A1:B2").Value 
End Sub 
+0

感谢您的帮助!然而上面的代码要求我知道预先粘贴的范围。然而,这取决于月份。我可以找到包含月份的单元格,并且知道偏移量。但我需要以某种方式遍历它们才能到达我的目标单元格吗? – replax 2011-12-19 06:27:51

+0

这对你有帮助吗? http://msdn.microsoft.com/en-us/library/aa221353(v=office.11​​).aspx ...你必须在条件检查月 – MacGyver 2011-12-19 06:29:43

+0

再次感谢,是的帮助!然而,由于没有我通常可以用来过滤所需细胞的条件,是否有一种方法可以处理每个第三个细胞? – replax 2011-12-19 06:38:41

-2

因此以后有更多的研究,我想我已经找到了答案。 请改正或改进我,如果我的方法是/错/不理想。 我正在使用一个循环,然后只是assingin值...我想知道,来自C++,如果这是做“最短”的方式?看起来像一个臃肿的循环...

Dim i As Integer 
For i = 6 To 55 
    targetSheetSal.Cells(ActiveCell.Row, i + 1).Value = sourceSheet.Cells(24, i).Value 
    i = i + 5 
Next i 

谢谢大家的时间,输入和建议!

+1

-1请勿逐个单元格复制。查看其他示例并复制多个单元格的范围。它快很多倍。示例:Range(“A2”)。Resize(300,20).Value'返回一个从单元格“A2”开始的'300' x'20'值的数组。您可以以类似的方式将数组分配给一个范围。 – ja72 2011-12-20 05:01:21

+0

感谢您的意见。然而,如果没有输入每个单独的列(可能有100多个),定义一个带有“间隙”的范围是可能的吗?如每六个细胞一样?可能使用偏移量()或你怎么实现? – replax 2011-12-20 05:24:12

+0

是的,你可以。一种选择是根据像Range(“B4:C9,E4:D9”)这样的单元列表来选择一个范围。或者,您可以通过直接对阵列进行操作来在VBA中执行此操作。发布另一个问题以获得完整答案。 – ja72 2011-12-20 06:33:31

相关问题