【问题标题】:Optimize loop multiple variables优化循环多个变量
【发布时间】:2018-07-12 22:05:59
【问题描述】:

我有大量数据,我需要优化这些行,但我根本不知道如何......

“x”的某些行将是黑色的,所以我不知道如何在不包含这些空白行的情况下使用数组,或者在没有它们的情况下如何编写它们。

x,a,b & d 是可变数。

a = Sheets("MODULOS").Range("a1048576").End(xlUp).Row
b = Sheets("TODO").Range("a1048576").End(xlUp).Row

For x = 1 To b
Range("Z1").Select
ActiveCell.Offset(x, 0).Select

For i = 1 To (a - 1)

If ActiveCell.Value <> 0 Then
    d = Sheets("AGREGADO").Range("a1048576").End(xlUp).Row
    Sheets("AGREGADO").Cells(d + 1, 1).Value = Sheets("TODO").Cells(x + 1, 7).Value
    Sheets("AGREGADO").Cells(d + 1, 3).Value = Sheets("TODO").Cells(x + 1, 25 + i).Value
    Sheets("AGREGADO").Cells(d + 1, 2).Value = Sheets("TODO").Cells(1, 25 + i).Value
    Sheets("AGREGADO").Cells(d + 1, 4).Value = Sheets("TODO").Cells(x + 1, 33 + a).Value
End If

    ActiveCell.Offset(0, 1).Select
Next i
Next x

【问题讨论】:

  • 为什么不用单元格公式而不是 VBA?
  • 我将这些数据用于其他事情。
  • 为什么公式会有问题?
  • 注意:您的标题显示“优化”,但您的代码无法正常工作,因此您需要的不是优化,而是修复。
  • 快速优化:开始Application.Calculation = xlCalculateManual,Application.ScreenUpdating = False ,退出前Application.Calculation = xlCalculationAutomatic ,Application.ScreenUpdating = True

标签: arrays excel vba loops for-loop


【解决方案1】:

有几种方法可以让你的代码更快:

总结(按重要性排序):

  1. 禁用自动计算和屏幕更新(如在 来自 Tomjohnriddle 的评论)
  2. 避免使用 .SelectActiveCell
  3. 在处理对象时尽可能使用 WITH

在您的代码中,它看起来像这样:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim ra As Range

a = Sheets("MODULOS").Range("a1048576").End(xlUp).Row
b = Sheets("TODO").Range("a1048576").End(xlUp).Row

For x = 1 To b

ra = Cells(1 + x, 26)

With Sheets("AGREGADO")

For i = 1 To (a - 1)

If ra.Value <> 0 Then
    d = Sheets("AGREGADO").Range("a1048576").End(xlUp).Row
    .Cells(d + 1, 1).Value = Sheets("TODO").Cells(x + 1, 7).Value
    .Cells(d + 1, 3).Value = Sheets("TODO").Cells(x + 1, 25 + i).Value
    .Cells(d + 1, 2).Value = Sheets("TODO").Cells(1, 25 + i).Value
    .Cells(d + 1, 4).Value = Sheets("TODO").Cells(x + 1, 33 + a).Value
End If

    ra = Cells(1 + x, 26 + 1)

Next i
Next x

End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 2011-10-04
    • 2017-09-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多