引用 MAXIF 中的变量
Refer to a variable in MAXIF
Sub test()
With Sheets("DATA")
'test1 ---> cell A1 has a correct result
.Range("A1").FormulaArray = "=MAX(IF(LEFT(C1:C10000,3) = ""PB-"",SUBSTITUTE(C1:C10000,""PB-"","""")+0))"
'test2 has a correct result
test2 = .[max(if(left(c1:c10000,3)="PB-",substitute(c1:c10000, "PB-" ,"")+0))]
'test3 gave me an error 2015 in locals window
test3 = Evaluate("max(if(left(c1:c10000,3)=""PB-"",substitute(c1:c10000, ""PB-"" ,"")+0))")
End With
End Sub
我想要什么:
C1:C10000 是来自 set rg = .range("data").columns(2)
的范围
“PB-”是来自 id = .range("D1").value
的值
没有先将结果写入单元格。
所以,在我实现这个变量之前,我想先用evaluate
语法在test3中编写代码来测试它,这几乎和test1一样。但是由于test3已经报了Error2015,我不能继续尝试将代码改成一些变量。
我也试过 """"
测试 3 中的“PB-”替换,但结果是 0。
我的问题:
- test3 中的代码应该如何?
- 如果使用 rg 和 id 变量,test3(或可能是 test2)中的代码如何?
非常感谢您的帮助。
先谢谢你了。
Sub test()
With Sheets("DATA")
Set rg = .Range("data").Columns(2)
'rg.Select
ID = "PB-"
test3a = rg.Parent.Evaluate("MAX(IF(LEFT(" & rg.Address(0, 0) & ",3) = " & ID & ",SUBSTITUTE(" & rg.Address(0, 0) & "," & ID & ","""")+0))")
test3b = Evaluate("max(if(left(" & rg.Address(0, 0) & ",3)=""" & ID & """,substitute(" & rg.Address(0, 0) & ", """ & ID & """ ,"")+0))")
test3c = Evaluate("max(if(left(" & rg.Address(0, 0) & ",3)=""" & ID & """,substitute(" & rg.Address(0, 0) & ",""" & ID & ""","""")+0))")
End With
End Sub
子 test3a 和 test3b 给我 Error2015,test3c 给我 0 个结果。
test3c 的 debug.print 结果是 max(if(left(C1:C12921,3)="PB-",substitute(C1:C12921,"PB-","")+0))
`
公式和快捷符号和计算
Option Explicit
Sub TestInitial()
With ThisWorkbook.Worksheets("DATA")
Dim Test1
.Range("A1").FormulaArray = "=MAX(IF(LEFT(C1:C10,3)=""" _
& "PB-"",SUBSTITUTE(C1:C10,""PB-"","""")+0))"
Test1 = .Range("A1").Value
Debug.Print "Initial Test1 = " & Test1
Dim Test2
Test2 = .[MAX(IF(LEFT(C1:C10,3)="PB-",SUBSTITUTE(C1:C10,"PB-","")+0))]
Debug.Print "Initial Test2 = " & Test2
Dim Test3
Test3 = .Evaluate("MAX(IF(LEFT(C1:C10,3)=""PB-""," _
& "SUBSTITUTE(C1:C10, ""PB-"" ,"""")+0))")
Debug.Print "Initial Test3 = " & Test3
End With
End Sub
Sub TestFinal()
With ThisWorkbook.Worksheets("DATA")
Dim rgAddress As String
rgAddress = .Range("data").Columns(2).Address(0, 0)
' To exclude the first cell (header), instead you could do:
'With .Range("data").Columns(2)
' rgAddress = .Resize(.Rows.Count - 1).Offset(1).Address(0, 0)
'End With
Dim ID As String: ID = CStr(.Range("D1").Value)
Dim Test1
.Range("A1").FormulaArray = "=MAX(IF(LEFT(" & rgAddress & ",3)=""" _
& ID & """,SUBSTITUTE(" & rgAddress & ",""" & ID & ""","""")+0))"
Test1 = .Range("A1").Value
Debug.Print "Final Test1 = " & Test1
Dim Test2
Test2 = .[MAX(IF(LEFT(data,3)=D1,SUBSTITUTE(data,D1,"")+0))]
Debug.Print "Final Test2 = " & Test2
Dim Test3
Test3 = .Evaluate("MAX(IF(LEFT(" & rgAddress & ",3)=""" _
& ID & """,SUBSTITUTE(" & rgAddress & ",""" & ID & ""","""")+0))")
Debug.Print "Final Test3 = " & Test3
End With
End Sub
Sub test()
With Sheets("DATA")
'test1 ---> cell A1 has a correct result
.Range("A1").FormulaArray = "=MAX(IF(LEFT(C1:C10000,3) = ""PB-"",SUBSTITUTE(C1:C10000,""PB-"","""")+0))"
'test2 has a correct result
test2 = .[max(if(left(c1:c10000,3)="PB-",substitute(c1:c10000, "PB-" ,"")+0))]
'test3 gave me an error 2015 in locals window
test3 = Evaluate("max(if(left(c1:c10000,3)=""PB-"",substitute(c1:c10000, ""PB-"" ,"")+0))")
End With
End Sub
我想要什么:
C1:C10000 是来自 set rg = .range("data").columns(2)
的范围
“PB-”是来自 id = .range("D1").value
的值
没有先将结果写入单元格。
所以,在我实现这个变量之前,我想先用evaluate
语法在test3中编写代码来测试它,这几乎和test1一样。但是由于test3已经报了Error2015,我不能继续尝试将代码改成一些变量。
我也试过 """"
测试 3 中的“PB-”替换,但结果是 0。
我的问题:
- test3 中的代码应该如何?
- 如果使用 rg 和 id 变量,test3(或可能是 test2)中的代码如何?
非常感谢您的帮助。
先谢谢你了。
Sub test()
With Sheets("DATA")
Set rg = .Range("data").Columns(2)
'rg.Select
ID = "PB-"
test3a = rg.Parent.Evaluate("MAX(IF(LEFT(" & rg.Address(0, 0) & ",3) = " & ID & ",SUBSTITUTE(" & rg.Address(0, 0) & "," & ID & ","""")+0))")
test3b = Evaluate("max(if(left(" & rg.Address(0, 0) & ",3)=""" & ID & """,substitute(" & rg.Address(0, 0) & ", """ & ID & """ ,"")+0))")
test3c = Evaluate("max(if(left(" & rg.Address(0, 0) & ",3)=""" & ID & """,substitute(" & rg.Address(0, 0) & ",""" & ID & ""","""")+0))")
End With
End Sub
子 test3a 和 test3b 给我 Error2015,test3c 给我 0 个结果。
test3c 的 debug.print 结果是 max(if(left(C1:C12921,3)="PB-",substitute(C1:C12921,"PB-","")+0))
`
公式和快捷符号和计算
Option Explicit
Sub TestInitial()
With ThisWorkbook.Worksheets("DATA")
Dim Test1
.Range("A1").FormulaArray = "=MAX(IF(LEFT(C1:C10,3)=""" _
& "PB-"",SUBSTITUTE(C1:C10,""PB-"","""")+0))"
Test1 = .Range("A1").Value
Debug.Print "Initial Test1 = " & Test1
Dim Test2
Test2 = .[MAX(IF(LEFT(C1:C10,3)="PB-",SUBSTITUTE(C1:C10,"PB-","")+0))]
Debug.Print "Initial Test2 = " & Test2
Dim Test3
Test3 = .Evaluate("MAX(IF(LEFT(C1:C10,3)=""PB-""," _
& "SUBSTITUTE(C1:C10, ""PB-"" ,"""")+0))")
Debug.Print "Initial Test3 = " & Test3
End With
End Sub
Sub TestFinal()
With ThisWorkbook.Worksheets("DATA")
Dim rgAddress As String
rgAddress = .Range("data").Columns(2).Address(0, 0)
' To exclude the first cell (header), instead you could do:
'With .Range("data").Columns(2)
' rgAddress = .Resize(.Rows.Count - 1).Offset(1).Address(0, 0)
'End With
Dim ID As String: ID = CStr(.Range("D1").Value)
Dim Test1
.Range("A1").FormulaArray = "=MAX(IF(LEFT(" & rgAddress & ",3)=""" _
& ID & """,SUBSTITUTE(" & rgAddress & ",""" & ID & ""","""")+0))"
Test1 = .Range("A1").Value
Debug.Print "Final Test1 = " & Test1
Dim Test2
Test2 = .[MAX(IF(LEFT(data,3)=D1,SUBSTITUTE(data,D1,"")+0))]
Debug.Print "Final Test2 = " & Test2
Dim Test3
Test3 = .Evaluate("MAX(IF(LEFT(" & rgAddress & ",3)=""" _
& ID & """,SUBSTITUTE(" & rgAddress & ",""" & ID & ""","""")+0))")
Debug.Print "Final Test3 = " & Test3
End With
End Sub