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" ?谢谢!
我试图找到满足 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" ?谢谢!