【问题标题】:Worksheet Function Max with condition带条件的工作表函数最大值
【发布时间】:2016-04-25 18:31:48
【问题描述】:

我有一张有几列的工作表,如果列 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 中重新编程(避免使用公式中的函数)?我可以问为什么吗?生成的 VBA 代码解决方案的性能只能是次要的。
  • 为什么不直接使用Evaluate("MAX(IF(" & rngName.Address & "=L11," & rngVal.Address & "))")
  • @Ralph,嗨 Ralph,是的,我是正确的,我需要对其进行编码的原因是我将为另一张工作表使用更大的代码,所以我需要它能够告诉用户,他们选择的名字的最后一个数字是什么,所以他们可以使用下一个数字。谢谢
  • @DirkReichel,感谢您的评估工作完美。如果您发布答案,我会为您标记。再次感谢!!

标签: vba excel excel-2010


【解决方案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

提示:不要使用NameMax,因为它们是对象的属性,如果相同的“名称”连接到不同的对象类型,有时 VBA 会混淆 :)

【讨论】:

  • 感谢您的建议,我现在将更改。它工作完美!再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多