MS Excel 2010 MAXIFS 等效于 VBA 用户表单

MS Excel 2010 MAXIFS equivalent in VBA Userform

我创建了一个 Excel 用户表单,以方便将新行的数据输入合同登记册。我有一个字段,它通过查找合同编号列表(A 列)中的最大编号然后加 1 来自动生成一个新的唯一合同编号。这个公式非常有效:

Me.tbContractNumber = Application.WorksheetFunction.Max(Sheet1.UsedRange.Columns(1)) + 1

我现在必须添加一个 IF 条件来过滤掉任何小于“2018000”的合同编号。我已经研究出如何在使用 MAXIFS 的普通 Excel 工作簿中执行此操作,但显然 MAXIFS 在 VBA?

中不是可用函数

有人可以建议与下面的 Excel 公式等效的 VBA 代码吗?提前致谢!

=MAXIFS(A2:A500,A2:A500,"<2018000")+1

编辑 我们的工作计算机 运行 2010 不允许我添加 MS Office 16.0 对象库,因此 MAXIFS 功能将无法使用。我可以使用以下数组公式,但我从未在 VBA 中使用过数组公式。有人可以建议与下面的 Excel 公式等效的 VBA 代码吗?提前致谢!

{=MAX(IF(A:A<2018000,A:A)) +1}

如果您仍然要查找最大的数字,是否需要过滤掉小于 2018000 的任何数字?如果您至少有一个条目等于 to/higher 大于 2018000,则无论其他条目如何,您的最终结果都会更高。

我相信有更有效的方法,但如果您满意:

Me.tbContractNumber = Application.WorksheetFunction.Max(Sheet1.UsedRange.Columns(1)) + 1

然后尝试:

me.tbContractNumber = Application.WorksheetFunction.MaxIfs(Sheet1.UsedRange.Columns(1), Sheet1.UsedRange.Columns(1), ">" & 2018000) + 1

...但显然 MAXIFS 在 VBA 中不是可用函数。在 VBA 中它不存在,但如果您将 Excel 16.0 对象库(屏幕截图中的第二个)添加到您的项目中,您将能够按如下方式访问它:

Application.WorksheetFunction.MaxIfs 'Only in Excel
Excel.WorksheetFunction.MaxIfs       'Any host of VBA - Excel, Access, Word

如果您在 Excel 中工作,则默认添加该库。关于 "translation" 从 Excel 到 VBA 的工作公式,请检查:

我刚刚学会了Evaluate函数!所以等效于我想使用的数组公式将 VBA 转换为:

Me.tbContractNumber = Evaluate("=MAX(IF(" & "A:A" & "<2018000," & "A:A" & "))+1")