【问题标题】:VBA Excel to Hide faster more than 300,000 rowsVBA Excel 可以更快地隐藏超过 300,000 行
【发布时间】:2019-09-12 13:41:46
【问题描述】:

我在 excel 中有超过 300.000 行的行 那我想做这份工作

  1. 比较列 C&D 和 E 中显示的结果
  2. 隐藏所有值为 TRUE 的行,只显示 FALSE

我正在尝试使用此代码,但隐藏行需要超过 15 分钟

Dim LastRow As Long
Dim i, Hide, popup  As Long 
LastRow = Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To LastRow
  If Range("C" & i).Value = Range("D" & i).Value Then
      Range("E" & i).Value = "True"
  Else
  Range("E" & i).Value = "False"


  End If
 If Cells(x, "E").Value = "True" Then
 Rows(x).Hidden = True

End If

Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Next i

【问题讨论】:

  • 在您的代码中,您不会显示 Application.Calculation = xlCalculationManualApplication.ScreenUpdating = False 行。你有这些吗?
  • 是的,我有那个代码,但不影响这个代码
  • 请注意,如果您声明Dim i, Hide, popup As Long,则只有popup 的类型为Long,而其他两个为Variant。在 VBA 中,您必须为 每个 变量声明一个类型,否则它们默认为 VariantDim i As Long, Hide As Long, popup As Long
  • 尝试使用数据库(例如 sql server)来执行数据库任务(xompare mfilter)并将查询链接到工作表。(数据连接)
  • @ComputerVersteher 我知道,但我只想使用 Excel 分享这些数据

标签: excel vba


【解决方案1】:

你可以这样做:

Dim LastRow As Long
Dim sht As Worksheet
Set sht = ActiveSheet

LastRow = sht.Range("B" & Rows.Count).End(xlUp).Row

With sht.Range("E2:E" & LastRow)
    .Formula = "=C2=D2"
    .Value = .Value
    .Offset(-1, 0).Resize(.Rows.Count + 1).AutoFilter Field:=1, Criteria1:="FALSE"
End With

那应该更快。不过在此之前不要关闭计算!

【讨论】:

  • 代替 .Formula 和 .Value 您可以避免在工作表上进行评估:.Value = Application.Evaluate("C2:C" & LastRow & "=D2:D" & LastRow)
  • @EvR - 我确实考虑到了这一点(但使用 sht.Evaluate 来确保对正确表格的公式进行评估)并且不知道如何设置计算可能是一个更安全的赌注。跨度>
  • 友情提示:考虑到.AutoFilter(以及条件格式)总是使用区域设置,所以必须使用例如Criteria1=FALSCH 用德语代替 FALSE,分别用 WAHR 代替 TRUE :-)
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
相关资源
最近更新 更多