【问题标题】:How do I make a Range of a certain area, that has been filtered out?如何制作已过滤掉的某个区域的范围?
【发布时间】:2019-10-21 06:38:36
【问题描述】:

首先,我想编写一个 VBA 代码,它允许我选择 Excel 工作表的某个范围,然后将一些需要的值复制到另一个工作表。问题在于,在我从中获取信息的 Excel 工作表中,应用了一些过滤器。

所以我使用方法 (?) .SpecialCells(xlCellTypeVisible) 找到了解决方案,但问题再次是,它适用于 1 列,但不适用于多于一列的范围。对于多列的范围,它只选择第一行

Dim rng As Range
Set rng = src.Worksheets("l04").Range(src.Worksheets("l04").Range("Z7:AK7"), src.Worksheets("l04").Range("Z7:AK7").End(xlDown)).SpecialCells(xlCellTypeVisible)

我对这行代码的预期结果应该是,Range rng 设置为从 Z7 到 AK7 一直到最大行数,但仅限于可见的行数。

Edit1:更改SpecialCell --> SpecialCells

【问题讨论】:

标签: excel vba


【解决方案1】:
Dim cell As Range
Dim lastRow As Long
With src.Worksheets("104")
    lastRow = .Cells(.Rows.Count, "Z").End(xlUp).row
    With .Range("Z7:AK" & lastRow)
        For Each cell In .Columns(1).SpecialCells(xlCellTypeVisible)
            Debug.Print Intersect(.Cells, cell.EntireRow).Address ' change this to what you actually need to grab from each visible cell
        Next
    End With
End With

【讨论】:

  • 好的,所以我尝试了这个,但这并没有按我的预期工作,但我想我发现了我面临的问题: .SpecialCells(xlCellTypeVisible) 从字面上整理了每一行,其中有一个列,没有值。有没有办法让“排序出行”依赖于单列?例如:如果 Z 列有值,则将该行包含在 Range 中。
  • @Ayibogan,查看编辑后的代码。如果它解决了您的问题,请考虑将答案标记为已接受谢谢
  • 感谢编辑的代码,但我认为您不理解我的问题:我希望范围从 Z7 到 AK1048576,但只获取在 Z 列中具有可见值的行。
  • 看看 xlCellTypeVisible 的问题在于,它确实将每个不可见/没有值的单元格排序出来。但是,我希望列 Z 具有值的每一行都包含在 Range 中,即使该值为 0/空。这不可能吗?我应该尝试将这些单元格保存在二维数组中吗?
【解决方案2】:

根据您问题中的一些线索,您可能会发现使用相交方法是有利的。

Dim rng as Range

With src.Worksheets("l04")

    'gets all visible cells within the used range on your sheet    
    set rng = .UsedRange.SpecialCells(xlCellTypeVisible) 

    'Use the Intersect method to select specific columns
    set rng = Intersect(rng, .range("AB:AB, AD:AD"))

End With

注意:这不会选择到最后一行(即第 1,048,576 行),只会选择数据在指定范围内的最后一行。

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多