Изменение формулы рабочего листа на формулу VBA с рабочим листом. Функция - PullRequest
0 голосов
/ 07 июня 2018

в настоящее время у меня есть относительно сложная формула рабочей книги, которую я хотел бы перевести в формулу 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 голосов
/ 08 июня 2018

Три вопроса здесь

  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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...