Excel VBA - 如何有效地将多个单元格从一个文件复制到另一个文件?

时间:2011-12-19 06:02:15

标签: excel excel-vba copy excel-2003 vba

目前,我正在努力解决以下问题: 我有两个Excel文件。一个文件包含大量数据,另一个文件用于评估它。 现在我需要有效地将数据从源复制到目标工作簿。源datapattern看起来类似于以下内容:

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

其中bla表示不感兴趣的数据,A列表示月份(重要),IMT是重要数据,这是我为什么这样做的原因。此外,Frm表示单元格包含公式,而不是值,必须保留/恢复。 此外,必须保留目标文件的单元格格式(可以使用.PasteSpecial实现)。

目标工作簿看起来完全相同,省略了半个emty行“2”。

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

编辑:example screenshot 澄清:屏幕截图显示了源表。重要信息是在ss中选择的信息。这张纸就像这样向右移动(直到BF)。我需要复制每六个条目。目标表看起来完全相同(省略半空中间行),除了在源中是公式但需要是目标值的所需信息。 非常感谢你帮助我!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:-2)

经过一些研究后,我想我找到了答案。 如果我的方法是关闭/错误/不理想,请纠正或改进我。 我正在使用一个循环,然后只是分配价值...我想知道,来自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

感谢大家的时间,意见和建议!