如何将过滤后的范围存储到数组中?

问题描述 投票:0回答:1

我挠头完成我的这个 VBA 脚本并陷入困境:

在sheet1中,我有一个大表(非结构化),范围为A1:BY1200,第1行包含已过滤的标题。现在我只需要将过滤后的范围存储到数组中并将数组数据写回不同的工作簿。以下是我实现上述目标的半完整代码:

我的困惑:

  1. 我不熟悉循环过滤范围并将它们存储到数组中。
  2. 我还需要完成最后一部分,以便将数组数据(过滤后的范围)写回,例如,sheet2 起始单元格 A1。

我已经阅读了一些类似场景的帖子,但没有一个完全满足我的案例的所有要求。有人在其他帖子中建议在循环过滤范围以记录到数组中时使用 Areas 方法。

提前非常感谢。

注意:过滤后,过滤范围内有不相邻的行

    Sub StoreFilteredRangeInArray()
    Dim rCell as Range, rData as Range, rArea as Range
    Dim i as Long
    
    with Activesheetset 
    set rData = .range("A1").CurrentRegion
    
    Dim rFiltered as Range
    rData.autofilter Field:=1, Criteria1:="<>"
    
    with rData
    set rFiltered = .offset(1,0).Resize(.Rows.count -1, .Column.count).SpecialCells(xlCellTypeVisible)
    end with

    Dim myArray() as variant
    ...(get stuck here)
    
    end with
    End Sub
arrays vba filter range area
1个回答
-1
投票

搜索,可能还有人工智能,都是你的朋友:

循环范围并将其存储在数组中:

Public Function RangeToArray(rng As Range) As Variant
Dim i As Long, r As Range
ReDim arr(1 To rng.Count)

i = 1
For Each r In rng
arr(i) = r.Value
i = i + 1
Next r

RangeToArray = arr
End Function

第二个:

Public Sub CopyArray(rnArray() As Variant)'<= Populated Array
'output the array to a different range of cells
   Sheets("Sheet2").Range("A1:BY1200").Copy = rnArray()
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.