如何将一本书中的cellcontents合并到另一本书中

时间:2017-06-23 14:34:26

标签: excel excel-vba vba

我需要将不同列中的某些内容和工作簿1中的单元格复制到工作簿2中。

以下是一个例子:

function redraw() {
    var lat_tmp = map.getCenter().lat;
    var lng_tmp = map.getCenter().lng;
    map.setView([-66.22149259832975, -1.142578125]);
    console.log("Reloading...");
    setTimeout(function () {
        waitForTilesToLoad()
    }, 50000);
    map.setView([lat_tmp, lng_tmp]);
    console.log("Done");
}

对于这些单元格中的每个值,它需要包含来自同一工作簿和工作表的2列: 例如B2值需要列Workbook1.Worksheets("sheet25").Range("B2:AA2")

这需要复制到A9:EndOfValue + B9:EndOfValue 当代码进入工作簿1的C2列时再次启动,对工作簿2中的所有值一直到最后一个(AA2)。

我会考虑使用workbook2.Sheet1("Sheet1").Range("A2:EndofValue")循环但是我已经读过这会在关闭时留下很多大文件的污垢(我的很大!就像35000行一样,在用26和26复制后会成倍增加100!)。

2 个答案:

答案 0 :(得分:1)

我想我有一个解决你问题的方法。就我从你的描述中收集而言,A列和B列的总和被组合成一个结果,例如,在新工作簿的单元格A1中返回,然后在接下来的两列中返回B1,等等。 - 我使用过为此目的,26列,数字1到35000。我还假设您的数据长35000行,宽26行。使用嵌套循环是我的选择,但是我使用了一个动态数组来计算列A和B,B和C,C和D等的总和,直到它到达结尾。

程序的逻辑分别使用xlRight和xlUp建立数据的水平和垂直范围。反过来,嵌套循环有三个级别。最外层确定新工作表中的连续单元格,其中输出总和,第二级别用数据遍历每一列,最后一级别限制处理到最后一行数据。

每次处理列时,动态数组将增加到35000个单位。每个数组项都是列中活动单元格与其旁边的活动单元格的总和。在每个循环结束时,在分析下一列之前,将数组和输出总和的值清零。

为了示例,我使用了同一文件的Sheet1和Sheet2,但出于您的目的,它就像创建工作簿变量(egxworkbooks.add)并将其设置为输出目标一样简单。

不幸的是,该程序确实需要一段时间才能执行,但我的机器确实是从雷曼兄弟仍然相关的时间开始的。

与代码一起使用,并集成了注释:

Sub summing_bigdata()

Dim n As Double, a As Double, b As Double
Dim Z As Integer
Dim arr_s() As Variant
Dim lstcl As Variant, lstcl2 As Variant

'establish the limits of the data
lstcl = Range("A100000").End(xlUp).Row
lstcl2 = Range("A1").End(xlToRight).Column


'establish successive output columns
For Z = 1 To lstcl2
    'looping through each column of data
    For a = 1 To lstcl2
        'looping through each row of data
        For n = 1 To lstcl

            'preserve the size of the array at each pass to prevent overwriting previous data
            ReDim Preserve arr_s(n)

            'fill each array item with the sum of each cell in the column and the cell next to it
            arr_s(n) = Cells(n, a).Value + Cells(n, a).Offset(0, 1).Value

         Next

    'add all the elements of the array into b
    b = Application.WorksheetFunction.Sum(arr_s)

    'output b in the new sheet/file
    Sheets(2).Cells(1, 1).Offset(0, Z) = b

    Next

    'reset the value of b and the array for the next column to be analyzed
    b = 0
    Erase arr_s

Next

End Sub

希望这会有所帮助。

答案 1 :(得分:0)

Wauw!非常感谢您的时间和解释。但是我很抱歉!我显然犯了一个小错误。它不是第二册中新列中需要的两列的总和。我只需要在第二册中的每一列中复制这两列。不过,我想我可以用你的循环为我的贡献。再次,非常感谢!欢呼声。