这可能在这里的某个地方,但是我找不到它。 希望从另一张工作表上的过滤范围中获取一个值,而不必设置循环或转到另一张工作表。 对于未过滤的数据,此方法有效: 我正在使用名为“ Main”的工作表
for x = 1 to whatever
SelRow = Sheets("Data").Range("D:D").Find(Range("D" & x)).row
MsgBox Sheets("Data").Range("A" & SelRow + 1)
next x
如果未过滤数据表,上述内容将为我提供SelRow + 1上Col“ A”中任何值的值,但是如果我有一个过滤器,则我需要的是1号Col“ A”中的任何值数据表中SelRow之后的可见行。
谢谢
答案 0 :(得分:1)
您需要找到找到的单元之后的第一个可见单元。使用Range.SpecialCells方法可以轻松实现这一点。
Option Explicit
Sub Macro1()
Dim x As Long, whatever As Long, m As Variant, wsm As Worksheet
Set wsm = Worksheets("main")
With Worksheets("data")
whatever = wsm.Cells(.Rows.Count, "D").End(xlUp).Row
For x = 1 To whatever
m = Application.Match(wsm.Cells(x, "D"), .Range("D:D"), 0)
If Not IsError(m) Then
Debug.Print .Range(.Cells(m + 1, "A"), .Cells(.Rows.Count, "A")).SpecialCells(xlCellTypeVisible).Cells(1).Value
End If
Next x
End With
End Sub