Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 16.07.2019, 16:16   #1
Aleksei_Biboranov
Новичок
 
Регистрация: 16.07.2019
Сообщений: 1
Репутация: 10
Восклицание Запись формулы в макрос

Нужно записать в макрос формулу, которая берет данные из столбца K листа "Таблица для расчёта" (ячейки K2:K18), сравнивает со значениями, внесенными также в столбец K, но уже в Листе 1 (ячейки, начиная с K2), и в конце концов выводит ближайшее по величине значение из листа "Таблица для расчёта" в столбец B Листа 1, начиная c B2.

Вот исходная формула, которая работает вне макроса:
Код:
=ИНДЕКС('Таблица для расчёта'!K2:K18;ПОИСКПОЗ(МИН(ABS('Таблица для расчёта'!K2:K18-'Лист 1'!K2));ABS('Таблица для расчёта'!K2:K18-'Лист 1'!K2);0))
Вот формула, которую я написал вручную:
Код:
Sheets("Таблица для расчёта").Range("B2:B").FormulaArray = Application.Index(Sheets("Таблица для расчёта").Range("K2:K18"), Application.Match(Application.Min(Abs(Sheets("Таблица для расчёта").Range("K2:K18") - Sheets("Лист 1").Range("K2:K"))), Abs(Sheets("Таблица для расчёта").Range("K2:K18") - Sheets("Лист 1").Range("K2:K")), 0))
А вот формула, созданная автоматически при записи макроса, при клацании на ячейку с результатом формулы:
Код:
 Selection.FormulaArray = _
       "=INDEX('Таблица для расчёта'!RC[9]:R[16]C[9],MATCH(MIN(ABS('Таблица для расчёта'!RC[9]:R[16]C[9]-'Лист 1'!RC[9])),ABS('Таблица для расчёта'!RC[9]:R[16]C[9]-'Лист 1'!RC[9]),0))"
Данная формула должна работать для каждой заполненной ячейки в столбце B (Лист 1), начиная с B2. Проблема в том, что в формуле, которую написал я, программа пишет Run-time error 1004, а формула, созданная при записи, работает только при выборе определённой ячейки (что записывать вместо Selection я так и не разобрался), да ещё и со сдвигом вниз (область K2:K18, например, меняется на K3:K19 и далее)

Также, если вместо этой формулы можно создать массив, который будет действовать точно также, хотел бы узнать, как его можно записать. Но исправление неработающей в макросе формулы будет уже вполне достаточно.

Вот пример документа, в котором это должно быть реализовано:
Пример_1.rar


Вопрос решён.
Кто столкнется с подобной задачей, вот корректный код:
Код:
Sub Макрос1()
Dim x As Long, posstr As Long
posstr = Cells(1, 11).CurrentRegion.Rows.Count
For x = 2 To posstr
    ActiveSheet.Cells(x, 2).FormulaArray = _
            "=INDEX('Таблица для расчёта'!R2C11:R18C11,MATCH(MIN(ABS('Таблица для расчёта'!R2C11:R18C11-'Лист 1'!RC[9])),ABS('Таблица для расчёта'!R2C11:R18C11-'Лист 1'!RC[9]),0))"
Next x
End Sub

Последний раз редактировалось Aleksei_Biboranov; 16.07.2019 в 17:11. Причина: Вопрос решён!
Aleksei_Biboranov вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос протягивания формулы perven1 Microsoft Office Excel 4 03.10.2017 20:41
Запись формулы (VBA) Olshevskiy Помощь студентам 3 20.11.2016 17:34
Макрос на вставку формулы Kapkom Microsoft Office Excel 2 28.06.2016 18:39
Запись формулы в функцию Roller17 Общие вопросы Delphi 1 19.06.2011 13:12
Запись формулы Alex0161 Помощь студентам 2 29.12.2010 21:25


23:32.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru