工作表函数 Max 带条件

问题描述 投票:0回答:2

我有一个有几列的工作表,我想要的是如果 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 excel excel-2010
2个回答
1
投票

作为将公式“复制”到 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 会感到困惑:)


-1
投票

很好,如果您必须找到动态范围(“A5:A20”)的值而不是找到文本框的最大值,那么您应该如何构建代码,谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.