gpt4 book ai didi

excel - 范围限制难题

转载 作者:行者123 更新时间:2023-12-02 07:24:08 25 4
gpt4 key购买 nike

通过 VBA 在某个范围内选择的内容是否有一些限制?基本上我发现,如果我要在循环中隐藏整行,如果有很多行需要隐藏,则需要相当长的时间。

ex) - 隐藏 A 列中没有值的任何行

For i = 1 to 600
With Range("A" & i)
If .value = vbEmpty then .EntireRow.Hidden = True
End With
Next

更快速的方法是创建一个引用每一行的单个范围,然后执行单个“.entirerow.hidden = true”语句。是的,我已经设置了 application.screenupdating = false。

我遇到的问题是,如果范围的字符串引用太长,它就会失败。

下面的代码声明了一个函数,它接受行号的标准数组(如果数组是预先创建的),以及参数参数(如果您不想预先声明数组,并且行列表很小)。然后它创建一个在范围引用中使用的字符串。

Function GetRows(argsArray() As Long, ParamArray args() As Variant) As Range

Dim rngs As String
Dim r

For Each r In argsArray
rngs = rngs & "," & r & ":" & r
Next
For Each r In args
rngs = rngs & "," & r & ":" & r
Next

rngs = Right(rngs, Len(rngs) - 1)
Set GetRows = Range(rngs)

End Function
Function dfdfd()

Dim selList(50) As Long, j As Long
For i = 1 To 100
If i Mod 2 = 1 Then
selList(j) = i
j = j + 1
End If
Next
selList(50) = 101
GetRows(selList).Select

End Function

第二个函数“dfdfd”仅用于给出失败时的示例。要查看它何时起作用,只需创建一个包含 5 个项目的新数组,然后尝试一下。它有效。

最终(?)更新:

Option Explicit

Public Sub test()
Dim i As Integer
Dim t As Long
Dim nRng As Range

t = Timer()
Application.ScreenUpdating = False
Set nRng = [A1]
For i = 1 To 6000
Set nRng = Union(nRng, Range("A" & i))
Next
nRng.RowHeight = 0
'nRng.EntireRow.Hidden = true
Application.ScreenUpdating = True
Debug.Print "Union (RowHeight): " & Timer() - t & " seconds"
'Debug.Print "Union (EntireRow.Hidden): " & Timer() - t & " seconds"
End Sub

结果:

联合(行高:0.109375 秒
联合(隐藏行):0.625 秒

最佳答案

我认为您在这里寻找的神奇函数是 Union()。它内置于 Excel VBA 中,因此请查看它的帮助。它正如您所期望的那样。

循环遍历您的范围,但不要构建字符串,而是构建多区域范围。然后您可以一次选择或设置整个事物的属性。

我不知道在单个范围内可以建立的区域数量限制是多少(如果有),但它大于 600。我不知道有哪些限制(如果有)选择或设置多区域范围的属性,但这可能值得一试。

关于excel - 范围限制难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com