【问题标题】:Changing a Worksheet Formula to a VBA formula with worksheet.function使用 worksheet.function 将工作表公式更改为 VBA 公式
【发布时间】:2018-06-08 08:43:26
【问题描述】:

目前我有一个相对复杂的工作簿公式,我想将其转换为 vba 公式。

目前,我编写了以下内容,但我希望它在代码执行期间基本评估函数并将值插入所需的单元格。

我想这是worksheetfunction 的某种组合,但我不确定如何翻译

代码(不起作用)

MWS.Cells(LastMWSR + 1, ClastMWSC).Value = WorksheetFunction.SUMIFS(mws.range(N:N),mws.Range(B:B),worksheetfunction.INDEX(mws.range(B:B),worksheetfunction.MAX(worksheetfunction.INDEX((mws.range(C:C)=MWS.Cells(LastMWSR + 1, ClastMWSC - 1))*worksheetfunction.ROW(mws.range(C:C)),0))),mws.range(C:C),MWS.Cells(LastMWSR + 1, ClastMWSC - 1))

Excel公式

=SUMIFS($N:$N,$B:$B,INDEX($B:$B,MAX(INDEX(($C:$C=$AM41)*ROW($C:$C),0))),$C:$C,$AM41)

MWS 是一个工作表
LastMWSR 是工作表中的最后一行
CLASTMWSC 是工作表中的最后一列

欣赏你的想法

编辑:再次尝试公式

【问题讨论】:

  • 你可以开始here
  • 不是我问的,而是问如何通过 worksheet.function 来完成它,因此它在代码中进行了评估,只是一个粘贴到单元格的公式。我正在寻找是否需要在公式之前指定地址或范围属性,或者是否需要使用 R1C1 表示法,以及是否需要澄清我的动态范围。除了那篇文章介绍的内容之外,还有很多其他内容。
  • 亲爱的朋友,要使用Application.worksheetfunction,您需要在VBA中传递范围和参数。例如,N:N 无论如何都应该类似于range("n:n"),很多时候通过使用 VBA 级别代码,您可以选择以不同且更简单的方式执行您正在寻找的事情。您有很多错字,我会编辑您的帖子,但请记住,对于所有功能,您必须再次使用工作表功能! MWS.Cells(LastMWSR + 1, ClastMWSC).Value = worksheetfunction.SumIfs(nws.range("n:n"),nws.range("b:b"),worksheetfunction.Index(range("b:b"),application.Max(....)
  • 另一种选择是获取您要查找的内容,将公式放入单元格中,然后跟进MWS.Cells(LastMWSR + 1, ClastMWSC).Value = MWS.Cells(LastMWSR + 1, ClastMWSC).Value。这将用值替换公式。

标签: vba excel excel-formula


【解决方案1】:

这里有三个问题

  1. 无效的工作表引用mws.Range(...
  2. 缺少引号Range(B:B)
  3. 错误的包围

重构,并添加了一些简化变量

Dim mws As Worksheet
Dim wf As WorksheetFunction
Dim mwsN As Range
Dim mwsC As Range
Dim mwsB As Range
Dim mwsLast As Range

Set wf = Application.WorksheetFunction
Set mws = Worksheets("mws")
Set mwsN = mws.Range("N:N")
Set mwsC = mws.Range("C:C")
Set mwsB = mws.Range("B:B")
Set mwsLast = mws.Cells(LastMWSR + 1, ClastMWSC - 1)

mws.Cells(LastMWSR + 1, ClastMWSC).Value = _
  wf.SumIfs(mwsN, mwsB, wf.Index(mwsB, wf.Max(wf.Index((mwsC = mwsLast) * wf.Row(mwsC), 0))), mwsC, mwsLast)

【讨论】:

  • 嘿,克里斯,我可以看到我哪里出错了,你的代码看起来很合理,但实际上当我运行它时它仍然会抛出不匹配错误。 “运行时错误 13:类型不匹配”不确定错误在哪里,因为所有内容都正确定义。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多