Преобразовать часть формулы из относительной в абсолютную ссылку - PullRequest
0 голосов
/ 02 июля 2019

Изначально я хотел изменить части формулы в каждой 82-й строке, где формула выглядит как

=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"&A7383)

Итак, я хотел изменить каждую формулу для тысячи строк с (...;$BI7382;...;"<="&$A7382;...) на: (...;$BI$7382;...;"<="&$A$7382;...) где $7382 всегда на одну строку перед строкой, включающей формулу выше. Поэтому следующая строка с этой формулой будет $ 7464, где мой код должен измениться с (...;$BI7463;...;"<="&$A7463;...) на: (...;$BI$7463;...;"<="&$A$7463;...) и так далее.

У меня был успех с вашим кодом

For i = 7383 To Cells(Rows.Count, 1).End(xlUp).Row Step 82
Cells(i, 1).Formula = Replace(Cells(i, 1).Formula, "$BI" & i - 1, "$BI$" & i - 1)
Cells(i, 1).Formula = Replace(Cells(i, 1).Formula, "$A" & i - 1, "$A$" & i - 1)

Но: есть один столбец, в котором есть ячейки с

=SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;<="&$A7382;A:A;">"&$A7383)

где последнее значение изменилось с

">"&A7383to">"&$A7383

так, что последние два значения имеют абсолютные ссылки на столбцы

Поскольку код находит два значения с $ A ... функция замены не работает должным образом (Ячейки выглядят как =SUMIFS($BJ:$BJ;$BO:$BO;$BI7382;$A:$A;"<="&$A7382;A:A;">"& после выполнения кода

1 Ответ

0 голосов
/ 02 июля 2019

Проблема в том, что строка "SUMIFS($BI" & cl.Row - 1 не существует в вашей формуле, поэтому ничего не заменяется.Попробуйте следующую строку, она должна работать.

cl.Formula = Replace(cl.Formula, "$BI" & cl.Row - 1, "$BI$" & cl.Row - 1)

Теперь лучше объявить переменную i как Integer, поскольку она используется в качестве индекса строки, а индексы строки являются целыми числами.Таким образом, мы избегаем неточности арифметики Double (т.е. с плавающей запятой).

Dim i As Integer

В цикле For i начинается с 7383 и увеличивается с шагом 81,Это хорошо.Однако i нигде не используется в операторе замены.Но For Each проходит по всем строкам столбца O.For Each не нужен.Вы можете получить доступ к ячейкам в столбце O с помощью Cells(i, 15).Таким образом, цикл For становится:

For i = 7383 To Cells(Rows.Count, 1).End(xlUp).Row Step 81
    Cells(i, 15).Formula = Replace(Cells(i, 15).Formula, "$BI" & i - 1, "$BI$" & i - 1)
Next i

Значение верхней границы i в цикле For определяется содержимым столбца A.Если столбец A содержит меньше строк, чем столбец O, то некоторые замены могут быть пропущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...