VBA меняет сложную формулу - PullRequest
0 голосов
/ 02 июня 2018

Я использую код с переключателем (см. Последний код), чтобы вставить новую строку в строку 15, которая выталкивает старые данные, и в то же время копирует те же формулы в строку 15, которые когда-то были (в строке15) до нажатия кнопки.

После нажатия кнопки я могу ввести трехзначные данные в E15, затем нажать ввод, и все формулы рассчитываются по строке 15 на основе того, что введено в E15.

Теперь мне нравится, как работает код, но по какой-то причине формула в CG15 меняется с

=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF14:CF$14,MATCH(9.99999999999999E+307,CF14:CF$14)):CF15),""),"")

на

=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF13:CF$14,MATCH(9.99999999999999E+307,CF13:CF$14)):CF15),""),"")

Я не могу понять, еслипроблема в коде или формуле в CG15. Вот «тестовый» файл, а ниже код

тестовый лист

Sub AddNewDrawing()
'
' AddNewDrawing Macro
'

'
    Rows("15:15").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A16:ua16").Select
    Selection.AutoFill Destination:=Range("A15:ua16"), Type:=xlFillDefault
    Range("A15:ua16").Select
    Range("E15").Select
    Selection.ClearContents
End Sub

Это может быть простым решением, но яя в тупике.Мне нужно, чтобы формула оставалась неизменной и не менялась.

Вот более подробная информация о том, что делает каждый код.Столбец CF15 имеет эту формулу, которая возвращает 1, если условие выполнено.

=IF(COUNTIF($AW16:$CC18,O15),1,IF(COUNTIF($AW16:$CC18,P15),1,IF(COUNTIF($AW16:$CC18,Q15),1,"")))

Столбец CG15 имеет эту формулу, которая подсчитывает пропуски (пустые ячейки) между каждым из 1 в столбце CF15.Примечание: 14 CG $ имеет постоянный 0 (ноль), который служит заполнителем для начала счета.

=IF(CF15=1,IF(CF15<>"",COUNTBLANK(INDEX(CF14:CF$14,MATCH(9.99999999999999E+307,CF14:CF$14)):CF15),""),"")

Спасибо

1 Ответ

0 голосов
/ 02 июня 2018

Когда вы вставляете новую строку 15, формула в CG15 опускается до CG16, а относительные адреса в формуле, относящиеся к строке 15 (например, CF15), становятся строкой 16 (например, CF16).

Однако относительные адреса, которые меньше 15, такие как CF14, не зависят от вставки строки.Когда вы «засыпаете» формулу с CG16 до CG15, все они затрагиваются, поэтому CF14: CF $ 14 становится CF13: CF $ 14 так же, как CF16 возвращается к исходному CF15.

Измените формулу на что-то, что независит от относительной разницы между вставкой строки или обратной засыпкой.

Относительный ряд CF14 может быть записан в CG15 как

index(CF:CF, row()-1)

Таким образом, получается ваша формула

=IF(CF15=1, COUNTBLANK(INDEX(CF$14:index(CF:CF, row()-1), MATCH(1e99, CF$14:index(CF:CF, row()-1))):CF15), text(,))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...