我有一个有几列的工作表,我想要的是如果 D 列与文本框中的名称匹配,则显示 A 列中的最大数字。
这是我在工作表上使用的公式,用于显示最后使用的数字。
=MAX(INDEX((D2:D41=L11)*B2:B41,0))
我遇到的问题是我无法将其转换为 VBA
'Cells with dates also return a value, and get covered for determining largest value. Percentages will convert and return numerics.
Dim rngVal As Range
Dim rngName as range
Dim Max As Double
Dim Name As String
'Set range from which to determine largest value
Set rngVal = sheets("Payment History").Range("B2:B41")
Set rngName = sheets("Payment History").Range("D2:D41")
Name = Me.TextBox1.value
'Worksheet function MAX returns the largest value in a range
Max = Application.WorksheetFunction.Max(rngVal)
'Displays largest value
MsgBox Max
End Sub
这是我的代码,它显示所有值的最大数量。
作为将公式“复制”到 vba 代码的简单方法,您可以使用
Evaluate
函数。对于您的示例,它看起来像这样:
Public Sub Test()
Dim rngVal As String
Dim rngName As String
Dim xMax As Double
Dim xName As String
'Set range from which to determine largest value
rngVal = Sheets("Payment History").Range("B2:B41").Address
rngName = Sheets("Payment History").Range("D2:D41").Address
xName = Me.TextBox1.Value
'Worksheet function MAX returns the largest value in a range
xMax = Evaluate("MAX(IF(" & rngName & "=" & xName & "," & rngVal & "))")
'Displays largest value
MsgBox xMax
End Sub
提示:不要使用
Name
或 Max
,因为它们是对象的属性,如果相同的“名称”连接到不同的对象类型,有时 VBA 会感到困惑:)
很好,如果您必须找到动态范围(“A5:A20”)的值而不是找到文本框的最大值,那么您应该如何构建代码,谢谢。