目前我有一个相对复杂的工作簿公式,我想将其转换为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是工作表中的最后一列
欣赏你的想法
编辑:再次尝试公式
答案 0 :(得分: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)