首页 文章

使用worksheet.function将工作表公式更改为VBA公式

提问于
浏览
1

目前我有一个相对复杂的工作簿公式,我想将其转换为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 回答

  • 2

    这里有三个问题

    • 无效的工作表引用 mws.Range(...

    • 缺少报价 Range(B:B)

    • 包围不好

    重构,并添加一些还原论变量

    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)
    

相关问题