Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-如何有效地将多个单元格从一个文件复制到另一个文件?_Excel_Copy_Excel 2003_Vba - Fatal编程技术网

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

Excel VBA-如何有效地将多个单元格从一个文件复制到另一个文件?,excel,copy,excel-2003,vba,Excel,Copy,Excel 2003,Vba,目前,我正在努力解决以下问题: 我有两个Excel文件。一个文件包含大量数据,另一个用于评估数据。 现在我需要高效地将数据从源工作簿复制到目标工作簿。源数据模式类似于以下内容: 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列

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

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个有价值的条目。如何才能最有效地将数据复制到第二个工作簿中? 请让我知道,如果有更多的信息,我可以提供。 谢谢你抽出时间

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

试试这个:

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

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

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

下面是一个示例代码,可以帮助您朝着正确的方向前进:

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

谢谢你的帮助!但是,上面的代码要求我事先知道粘贴到的范围。然而,这取决于月份。我可以找到包含月份的单元格,我知道偏移量。但我需要通过某种方式迭代它们才能到达我的目标细胞,不是吗?这对你有帮助吗。。。你必须输入一个条件来再次检查Monhthanks,是的,这很有帮助!但是,由于我通常无法应用任何条件来筛选所需的单元格,是否有一种方法可以通过(例如)每个第三个单元格?能否详细描述您希望对源中的每一行执行的操作(一步一步)以及您希望在目标工作簿中对该行执行的操作(一步一步)?我不明白目标是什么。如果您可以拍摄源的屏幕截图,快速制作目标的硬拷贝,并将这些图像插入到您的问题中,这样我就可以提供帮助,这可能会有很大帮助。
Set wb2=工作簿。Open vFile
更短更安全-1不要逐个单元格复制。查看其他示例并复制多个单元格的范围。速度快很多倍。示例:
Range(“A2”).Resize(300,20).Value
返回从单元格
“A2”
开始的
300
x
20
值数组。您可以以类似的方式将数组分配给某个范围。谢谢您的输入。但是,是否有可能在不输入每一列(可能为100+)的情况下定义一个带有“间隙”的范围?每六个细胞?可能使用offset()或如何实现?是的,您可以。一个选项是基于单元格列表选择一个范围,如
范围(“B4:C9,E4:D9”)
。或者,您可以在VBA中通过直接修改数组来执行此操作。用此贴出另一个问题以获得完整答案。