使用worksheet.function

时间:2018-06-07 19:22:53

标签: excel vba excel-vba excel-formula

目前我有一个相对复杂的工作簿公式,我想将其转换为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是工作表中的最后一列

欣赏你的想法

编辑:再次尝试公式

1 个答案:

答案 0 :(得分:2)

这里有三个问题

  1. 无效的工作表参考mws.Range(...
  2. 缺少引号Range(B:B)
  3. 不好的包围
  4. 重构,并添加一些还原论变量

    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)