Страницы: 1
RSS
Почему формула массива в макросе записывается одинаково во всех ячейках
 
Друзья, есть формула А1
Код
=ЕСЛИОШИБКА(ИНДЕКС(КАИС!$Q:$Q;ПОИСКПОЗ(D8&E8&F8&G8;КАИС!$D:$D&КАИС!$E:$E&КАИС!$F:$F&КАИС!$G:$G;0));"-")

Хочу ее вставить в макрос. Через запись макроса с включенным "Относительные ссылки"

Формула преобразуется в абсолютную в формате R1C1

Код
=IFERROR(INDEX(КАИС!C17,MATCH(RC[-4]&RC[-3]&RC[-2]&RC[-1],КАИС!C4&КАИС!C5&КАИС!C6&КАИС!C7,0)),""-"")

И соответственно перемещаясь по ячейкам мне выдает одни и те же данные.

Подскажите пожалуйста, как можно переделать формулу чтобы заработала относительносить к ячейкам?
.FormulaR1C1 и Formula выдают символ -  Как я понимаю формула не взаимодействует с массивом.
.FormulaArray Выдает абсолютную формулу и все значения одинаковые.
Изменено: vikttur - 18.09.2021 14:35:43
 
Вам нужна формула или нужен результат вычислений в ячейке?
 
В конечном итоге результат вычислений, в ячейках. Но вот застопорился на моменте с формулой.
Планирую вот так сделать, но сейчас все значения одинаковые
Код
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 - 18.09.2021 13:34:29
 
crazysobi, текст сломался, т.к. у вас был установлен Английский язык раскладки клавиатуры перед копированием кода. Если изменить раскладку клавиатуры на русский язык и снова скопировать код из редактора VBE, то всё будет хорошо. Копировать код макроса всегда надо на русской раскладке клавиатуры
 
Цитата
crazysobi написал: В конечном итоге результат вычислений, в ячейках
Так зачем формула?! Выбросьте ее в утиль и все вычисления производите в коде!
 
Разница в том, что формула уже есть, и она рабочая. А кода нет, и нужно его с нуля написать, Плюс еще мне все же интересно почему так формула не работает, и как это можно ее починить.
Изменено: vikttur - 18.09.2021 13:35:44
 
Цитата
crazysobi написал:
Через запись макроса с включенным "Относительные ссылки"
эта кнопка предназначена совершенно для другого: Использование относительных ссылок в макросах
Чтобы формула была с относительными ссылками, надо в ячейку её с относительными записывать. И судя по указанному коду - записалась она именно с относительными ссылками. Выполните макрос и установите в файле стиль отображения ссылок А1(Файл -Параметры -Формулы - галочка Стиль ссылок R1C1(снять))
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
К сожалению уже делал. При записи формулы через макрос, она преобразуется вот в такую
Код
.Formula = "=IFERROR(INDEX(KAIS!C17,MATCH(RC[-4]&RC[-3]&RC[-2]&RC[-1],KAIS!C4&KAIS!C5&KAIS!C6&KAIS!C7,0)),""-"")"
При этом полностью рабочая вот такая
Код
{=ЕСЛИОШИБКА(ИНДЕКС(KAIS!$Q:$Q;ПОИСКПОЗ(D9&E9&F9&G9;KAIS!$D:$D&KAIS!$E:$E&KAIS!$F:$F&KAIS!$G:$G;0));"-")}
А через макрос формула теряет массив {} и не работает(

А если проставить Arroy
То макрос использует абсолютную формулу, что логично, и все данные одинаковые.
Изменено: vikttur - 18.09.2021 14:34:29
 
Цитата
crazysobi написал:
А через макрос формула теряет массив
Тут имеет место быть нехватка знаний в области формул массива и в области донесения нам всей информации.
Вы не указали изначально ни про формулу массива, ни про то, что вписывать её пытаетесь сразу в диапазон, как я понимаю.
Т.е. у Вас что-то вроде:
Код
Range("A1:A20").FormulaArray = "=IFERROR....
А при такой записи Вы указываете Excel-ю записать ОДНУ формулу массива в весь диапазон. Вручную это делается так: выделили весь диапазон, вписали формулу, нажали Ctrl+Shift+Enter. Вот это и повторяется в коде.
Вы же хотите создать формулу в одной ячейке и распространить на остальные - это разные действия. Следовательно, Вам надо делать так:
Код
Range("A1").FormulaArray = "=IFERROR....
Range("A1").AutoFill Destination:=Range("A1:A20")
P.S. название темы: Почему формула массива в макросе записывается одинаково во всех ячейках
Изменено: Дмитрий(The_Prist) Щербаков - 18.09.2021 14:19:46
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал: Вам надо делать так...
Сработало) подскажите, но как я понимаю, это просто распространение формулы на все ячейки, и я не смогу сделать так, чтобы распространялся результат формулы?
или .Calculate как то можно добавить?
Изменено: vikttur - 18.09.2021 15:23:56
 
Цитата
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 скриптов, я так сделать не смогу, да?
Страницы: 1
Наверх