И соответственно перемещаясь по ячейкам мне выдает одни и те же данные.
Подскажите пожалуйста, как можно переделать формулу чтобы заработала относительносить к ячейкам? .FormulaR1C1 и Formula выдают символ - Как я понимаю формула не взаимодействует с массивом. .FormulaArray Выдает абсолютную формулу и все значения одинаковые.
В конечном итоге результат вычислений, в ячейках. Но вот застопорился на моменте с формулой. Планирую вот так сделать, но сейчас все значения одинаковые
Код
With Range("H10:H30")
.FormulaArray = "=IFERROR(INDEX(КАИС!C17,MATCH(RC[-4]&RC[-3]&RC[-2]&RC[-1],КАИС!C4&КАИС!C5&КАИС!C6&КАИС!C7,0)),""-"")"
.Calculate
.Value = .Value
crazysobi, текст сломался, т.к. у вас был установлен Английский язык раскладки клавиатуры перед копированием кода. Если изменить раскладку клавиатуры на русский язык и снова скопировать код из редактора VBE, то всё будет хорошо. Копировать код макроса всегда надо на русской раскладке клавиатуры
Разница в том, что формула уже есть, и она рабочая. А кода нет, и нужно его с нуля написать, Плюс еще мне все же интересно почему так формула не работает, и как это можно ее починить.
crazysobi написал: Через запись макроса с включенным "Относительные ссылки"
эта кнопка предназначена совершенно для другого: Использование относительных ссылок в макросах Чтобы формула была с относительными ссылками, надо в ячейку её с относительными записывать. И судя по указанному коду - записалась она именно с относительными ссылками. Выполните макрос и установите в файле стиль отображения ссылок А1(Файл -Параметры -Формулы - галочка Стиль ссылок R1C1(снять))
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
crazysobi написал: А через макрос формула теряет массив
Тут имеет место быть нехватка знаний в области формул массива и в области донесения нам всей информации. Вы не указали изначально ни про формулу массива, ни про то, что вписывать её пытаетесь сразу в диапазон, как я понимаю. Т.е. у Вас что-то вроде:
Код
Range("A1:A20").FormulaArray = "=IFERROR....
А при такой записи Вы указываете Excel-ю записать ОДНУ формулу массива в весь диапазон. Вручную это делается так: выделили весь диапазон, вписали формулу, нажали Ctrl+Shift+Enter. Вот это и повторяется в коде. Вы же хотите создать формулу в одной ячейке и распространить на остальные - это разные действия. Следовательно, Вам надо делать так:
Сработало) подскажите, но как я понимаю, это просто распространение формулы на все ячейки, и я не смогу сделать так, чтобы распространялся результат формулы? или .Calculate как то можно добавить?
crazysobi написал: не смогу сделать так, чтобы распространялся результат формулы?
можете. Протянули и записали вместо них значения. Вы же прикладывали в начале код, в котором есть запись значений вместо формул. Я так понимаю, код не Вы изначально писали, поэтому и не понимаете что куда прописать. Примерно так должно быть:
Код
Range("H10").FormulaArray = "=IFERROR(INDEX(КАИС!C17,MATCH(RC[-4]&RC[-3]&RC[-2]&RC[-1],КАИС!C4&КАИС!C5&КАИС!C6&КАИС!C7,0)),""-"")"
Range("H10").AutoFill Destination:=Range("H10:H30")
With Range("H10:H30")
.Calculate
.Value = .Value
End With
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Дмитрий(The_Prist) Щербаков, Спасибо, я уже в точности так и сделал. Как понимаю теперь на таблицу распространяется вся формула, и только потом дается результат ее вычислений. У меня блин 15 тыщ строк, на разок это будет норм, но потом долговато. Я как хотел, обрабатывается строчка, результат записывается, потом вторая строчка, результат записывается. И как я понимаю, без знания VBS скриптов, я так сделать не смогу, да?