- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设第 1 到 5,000 列中有 25,000 到 50,000 行数据,每列可能有不同的行数。所有数据都是连续的,即列中没有空行,也没有空列。
考虑以下代码
Dim i As Long
Dim Ws1 As Worksheet
Set Ws1 = ThisWorkbook.Worksheets(1)
Dim LastColumn As Long
Dim LastRow As Long
With Ws1
LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 1 To LastColumn
LastRow = .Cells(.Rows.Count, i).End(xlUp).Row
ThisWorkbook.Worksheets(2).Cells(i,1).Value = "Column: " & i & "has " & LastRow & "rows."
Next i
End With
在此代码中,我使用 .End(xlToLeft)
和 .End(xlUp)
找到了最后一列和最后一行的编号,它们从将工作表末尾返回到数据所在的位置。
我的问题是,从末尾回看是否会导致性能损失,如果您的数据是连续的,那么最好使用 .End(xlToRight)
和 .End(xlDown)
还是这种差异可以忽略不计?
最佳答案
我决定遵循 @Davesexcel 的极好建议,做一些时间实验:
Sub time_test(m As Long, n As Long, k As Long)
Dim i As Long, r As Long, sum As Long, lastrow As Long
Dim start As Double, elapsed As Double
Application.ScreenUpdating = False
lastrow = Range("A:A").Rows.Count
Range(Cells(1, 1), Cells(lastrow, m)).ClearContents
For i = 1 To m
r = Application.WorksheetFunction.RandBetween(n, k)
Cells(1, i).EntireColumn.ClearContents
Range(Cells(1, i), Cells(r, i)).Value = 1
Next i
Debug.Print m & " columns initialized with " & n & " to " & k & " rows of data in each"
Debug.Print "testing xlDown..."
start = Timer
For i = 1 To m
sum = sum + Cells(1, i).End(xlDown).Value
Next i
elapsed = Timer - start
Debug.Print sum & " columns processed in " & elapsed & " seconds"
sum = 0
Debug.Print "testing xlUp..."
start = Timer
For i = 1 To m
sum = sum + Cells(lastrow, i).End(xlUp).Value
Next i
elapsed = Timer - start
Debug.Print sum & " columns processed in " & elapsed & " seconds"
Application.ScreenUpdating = True
End Sub
像这样使用:
Sub test()
time_test 1000, 5000, 10000
End Sub
这会产生输出:
1000 columns initialized with 5000 to 10000 rows of data in each
testing xlDown...
1000 columns processed in 0.1796875 seconds
testing xlUp...
1000 columns processed in 0.0625 seconds
这表明使用 xlUp
更好。
另一方面,如果我运行 time_test 5000, 500, 1000
我得到输出:
5000 columns initialized with 500 to 1000 rows of data in each
testing xlDown...
5000 columns processed in 0.08984375 seconds
testing xlUp...
5000 columns processed in 0.84375 seconds
其中明显的优势被翻转了。我尝试了多种不同的参数选择,但无法获得清晰的信号。
如果我尝试运行 time_test 5000, 25000, 50000
(这就是您所问的问题),Excel 会崩溃,并显示一条错误消息,表明 Excel 缺乏资源来完成任务 - 在它到达任务之前时序阶段。
总而言之,任何差异似乎都很小,并且可能取决于实际使用的列数和行数。如果您所处的情况可能会产生影响,那么您可能正在针对 Excel 内存限制运行,在这种情况下,xlDown
和 xlUp
之间的差异可能是您的最小差异。担心。
关于vba - .End(xlDown) 与 .End(xlUp) 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472137/
我有以下代码 Set wb = ThisWorkbook` ComboBox7.RowSource = wb.Worksheets("Sheet5").Range("A2", _ Range("A65
我有“ block ”中的数据,我需要 SUM() 。但是, block 大小并不相同,因此我发现自己手动调整公式以适应范围。 示例数据: Chicago 10 Denver
我使用宏作为引用,并创建了这段代码来选择和格式化最后一行文本。但是,我收到语法错误。任何有关如何解决此问题的见解将不胜感激。 Dim Title As String Title = "C. TEST
假设第 1 到 5,000 列中有 25,000 到 50,000 行数据,每列可能有不同的行数。所有数据都是连续的,即列中没有空行,也没有空列。 考虑以下代码 Dim i As Long Dim W
所以我使用后期绑定(bind),即 set objxl = createobject("Excel.Application")类型的东西,从早期绑定(bind)切换到 set objxl = new
我只是想知道您是否可以帮助我更好地理解 .Cells(.Rows.Count,"A").End(xlUp).row 的作用。我理解 .End 部分之前的部分。 最佳答案 用于查找包含“A”列数据的工作
仅当我的表格在 AJ 列上完成时,以下代码才有效。我的表可以在 AJ 列之前完成。我如何修改代码以便当我的表格在任何列中完成时它可以工作? 先感谢您。 Dim row As Long, Column
这段代码会起作用吗? lr = RD.Cells(Rows.Count, 8).End(xlUp).Row wArray() = Split(RD.Range(Cells(2, 8), Cells(R
我是一名优秀的程序员,十分优秀!