Excel VBA 中的语法:如何将 table 的列引用为“=IF”函数中的范围

Syntax in Excel VBA: how to refer to column of a table as a range in the "=IF" function

我试图找到满足 3 个条件的单元格行(在 table 中)。感谢 another post 我想出了这个工作代码:

x = Filter(Application.Transpose(Application.Evaluate("=IF((Sheet6!A6:A15=""joseph"")*(Sheet6!B6:B15>date(2001,1,1))*Sheet6!C6:C15=""grenade""),ROW(Sheet6!A6:A15),""x"")")), "x", False)*

我现在想在此代码中使用命名范围,而不是 "Sheet6!A6:A15). When I try this I keep getting an error "类型不匹配”。 我尝试设置不同的范围,例如:

1) Dim rng1 As Range
   Set rng1 = Worksheets("Sheet6").Range("A7:A15")
   x = Filter(Application.Transpose(Application.Evaluate("=IF((rng1=""joseph"")*(Sheet6!B6:B15>date(2001,1,1))*Sheet6!C6:C15=""grenade""),ROW(rng1),""x"")")), "x", False)*

2) Dim rng2 As Range
   Set rng2 = Worksheets("Sheet6").Range("TestTable10[Column1]")
   x = Filter(Application.Transpose(Application.Evaluate("=IF((rng2 =""joseph"")*(Sheet6!B6:B15>date(2001,1,1))*Sheet6!C6:C15=""grenade""),ROW(rng2 ),""x"")")), "x", False)*

3) Dim rng3 As Range
   Set rng3 = Worksheets("Sheet6").ListObjects("TestTable10").ListColumns(1).Range
   x = Filter(Application.Transpose(Application.Evaluate("=IF((rng3 =""joseph"")*(Sheet6!B6:B15>date(2001,1,1))*Sheet6!C6:C15=""grenade""),ROW(rng3 ),""x"")")), "x", False)*

我也尝试过对范围 B6:b15 和 C6:C15 做同样的事情,但无论我做什么,我总是收到错误消息“Type Mismatch"

感谢您的帮助!

Dim rng1 As Range
Dim rRow as Range
Dim matchedRow as Integer
Set rng1 = Worksheets("Sheet6").Range("A7:A15")

    for each rRow in rng1

        if Range("A" & rRow.row).Value2 = "Criteria1" and Range("B" & rRow.row).Value2 = "Criteria2" and Range("C" & rRow.row).Value2 = "Criteria3" then
            rRow.row = matchedRow
            ''Do stuff with matchedRow
        end if

    next rRow

非常感谢 kaybee99,以下代码对我来说非常有用:

    Dim Rng As Range
    Set Rng = Application.Range(Table[Column1])
    Dim rRow As Range
    Dim matchedRow As Integer

    For Each rRow In BTUHRng
        If Worksheets(MySheet).Range("A" & rRow.Row).Value2 = Number1 And Worksheets(MySheet).Range("B" & rRow.Row).Value2 = "Text" And Worksheets(MySheet).Range("C" & rRow.Row).Value2 > Number2 Then
            matchedRow = rRow.Row
            Range("E1").Value = matchedRow
            Exit For
        End If
    Next rRow

我添加了一个 "Exit For" 因为我只对满足这些条件的第一个值感兴趣。

快速提问:是否可以通过引用 table 列来替换 "A"、"B" 和 "C"?像 Table[Column1].Column 这样的东西意味着 "A" ?谢谢!