我需要将不同列中的某些内容和工作簿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!)。
答案 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!非常感谢您的时间和解释。但是我很抱歉!我显然犯了一个小错误。它不是第二册中新列中需要的两列的总和。我只需要在第二册中的每一列中复制这两列。不过,我想我可以用你的循环为我的贡献。再次,非常感谢!欢呼声。