Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
Excel

Передача данных диапазона ячеек листа в функцию при обращении к ней из программы VBA

28.06.2023, 13:53. Показов 3977. Ответов 35

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть функция кубической интерполяции, которая хорошо работает на листе Excel.
Появилась необходимость использовать данную функцию в теле программного кода VBA с выводом результата в ячейку листа Excel.
У функции 3 аргумента:
1 - диапазон ячеек на листе заданный виде array as variant;
2 - тоже диапазон ячеек на листе заданный виде array as variant соответствующий 1 диапазону;
3 - числовое значение (as variant) которое ищет ближайшие значения и 1 диапазона.
Происходит интерполяция значения в первом диапазоне и подбирается соответствующее интерполированное значение из второго диапазона.
Как правильно передать массив из ячеек в функцию при ее вызове
Примерный код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub CommandButton1_Click()
 
Dim a As Single
 
Dim Al() As Variant
Al = Worksheets("Профиль NACA-0018").Range("A2:A103").Value
 
Dim KCy() As Variant
KCy = Worksheets("Профиль NACA-0018").Range("B2:B103").Value
 
a = Worksheets("Расчет").Range("C25").Value
mgXArray.Value = Al
mgYArray.Value = KCy
mgX = a
 
Cy = Cubiclnterpolation(mgXArray, mgYArray, mgX)
Worksheets("Массив").Cells( 2, 8) = Cy
 
End Sub
При запуске выдает "Object required (Error 424)"
Что я делаю не так?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2023, 13:53
Ответы с готовыми решениями:

Передача диапазона ячеек в функцию
Потребовалось написать пользовательскую функцию в Excel, функция должна принимать диапазон ячеек: =PLACE(A2:I2,A2) Функция PLACE...

В чем ошибка в коде при копировании диапазона ячеек с одного листа на другой
Здравствуйте. Пытаюсь разобраться, но никак не получается. Мне необходимо скопировать данные с ячеек Листа 2 на Лист 1. Код...

VBA действия при изменении диапазона ячеек
При изменении ячейки в диапазоне на определенное значение, должно выполняться определенное действие. Создала код в нужном мне листе: ...

35
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
11.07.2023, 08:03  [ТС]
Студворк — интернет-сервис помощи студентам
Добрый день.
Функция работает неправильно только при работе конструктора (здесь наличие кнопки)
Код с нераб функцией интерполяции.xlsm.xls
Рассчитанные значения не соответствуют диапазону заявленного значения alfa.
Просто как макрос при вызове функции из ячейки (без конструктора) нареканий к коду нет.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
11.07.2023, 09:42
У меня результаты одинаковые
2,16 -0,687000000000004
1
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
11.07.2023, 09:57  [ТС]
Вот файл с кодом VBA (на листе присутствует кнопка)

Код с нераб функцией интерполяции.xlsm.xls

Функция выдает значения не соответствующие текущему alfa из таблицы
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
11.07.2023, 10:00  [ТС]
Hugo121,
результаты не соответствуют значению попадающему в диапазон, значение не может быть в принципе больше 2 т.к.
в таблице соответствующих значений нет, а второе значение не может быть в принципе отрицательным.
0
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
11.07.2023, 10:09
art71,
Цитата Сообщение от art71 Посмотреть сообщение
Просто как макрос при вызове функции из ячейки (без конструктора) нареканий к коду нет.
Умоляю, дайте файл где функция выдаёт правильный результат. Чтобы можно было сравнивать и анализировать. Возможно загвоздка не в передаче данных, а в реализованном алгоритме.
У меня, как и у Hugo121, как бы я не использовал Вашу функцию, ответ один и тот же. То есть, похоже, что-то в консерватории не так
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
12.07.2023, 08:53  [ТС]
Вот здесь файл где функция кубической интерполяции представлена в виде функции вставленной в ячейку.
Код функции вызывается из ячейки.

Макрос интерполяция для форума.xlsm.xls

На листе работает корректно.

Вот этот модуль с функцией и надо запихать в код VBA по вызову кнопкой с листа.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
12.07.2023, 09:02
Например вот так тоже работает корректно:
Visual Basic
1
2
3
Sub tt()
MsgBox Cubiclnterpolation([$B$4:$B$28], [$C$4:$C$28], [H3])
End Sub
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
12.07.2023, 10:47  [ТС]
Hugo121,
Можно выложить реальный файл, который Вы говорите работает?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
12.07.2023, 10:50
Так в вашем файле добавьте код в модуль с функцией и выполните - увидите значение которое в первой ячейке, в H4
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
12.07.2023, 10:57  [ТС]
Hugo121,
Либо в моем файле что то не так. Он не работает. Поэтому прошу Ваш образец файла.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
12.07.2023, 11:02
Добавил файл, в нём кнопка.
Вложения
Тип файла: xls Макрос интерполяция для форума.xlsm.xls (19.8 Кб, 3 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
12.07.2023, 11:05
Вот скрин, я там форматом ячейки добавил знаков после запятой.
Миниатюры
Передача данных диапазона ячеек листа в функцию при обращении к ней из программы VBA  
0
0 / 0 / 0
Регистрация: 04.03.2020
Сообщений: 71
12.07.2023, 11:29  [ТС]
Hugo121,
Вы используете макрос в рамках листа Excel. Здесь вопросов не возникает.
Кнопку которую Вы выводите на экран, в коде VBA не представлена. Должно быть приблизительно так

Visual Basic
1
2
3
Private Sub CommandButton1_Click()
'Код вызова функции
End Sub
Кнопка на листе должна выбираться из элементов ActivX конструктора.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
12.07.2023, 13:10
Кнопка ничего не должна. Как и я никому ничего не должен - все кредиты закрыл, детей вырастил...
Но в рамках доброй воли - см. файл.
Но помню что были глюки с этими кнопками. Не у меня, претензии к MS
Вложения
Тип файла: xls Макрос интерполяция для форума3.xlsm.xls (24.8 Кб, 4 просмотров)
1
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
12.07.2023, 14:02
Лучший ответ Сообщение было отмечено art71 как решение

Решение

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub CommandButton1_Click()
    Range("H17") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$C$4:$C$28"), Range("H3"))
    Range("H18") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$D$4:$D$28"), Range("H3"))
    Range("H19") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$E$4:$E$28"), Range("H3"))
 
    Range("I17") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$C$4:$C$28"), Range("I3"))
    Range("I18") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$D$4:$D$28"), Range("I3"))
    Range("I19") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$E$4:$E$28"), Range("I3"))
    
    Range("J17") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$C$4:$C$28"), Range("J3"))
    Range("J18") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$D$4:$D$28"), Range("J3"))
    Range("J19") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$E$4:$E$28"), Range("J3"))
 
    Range("K17") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$C$4:$C$28"), Range("K3"))
    Range("K18") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$D$4:$D$28"), Range("K3"))
    Range("K19") = Cubiclnterpolation(Range("$B$4:$B$28"), Range("$E$4:$E$28"), Range("K3"))
End Sub
В приложенном файле уберите расширение .xlsx
Миниатюры
Передача данных диапазона ячеек листа в функцию при обращении к ней из программы VBA  
Вложения
Тип файла: xlsx Макрос интерполяция для форума.xlsm.xlsx (24.9 Кб, 2 просмотров)
1
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
12.07.2023, 14:29
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CommandButton1_Click()
    Set Angle = Range("B4:B28")
    Rarr = Array(Range("C4:C28"), Range("D4:D28"), Range("E4:E28"))
    Set Begin = Range("H17")
    Set tAngle = Range("H3")
    
    For i = 0 To 3
        For j = 0 To 2
            Begin.Offset(j, i) = Cubiclnterpolation(Angle, Rarr(j), tAngle.Offset(0, i))
        Next
    Next
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2023, 14:29

Защита листа,книги, диапазона ячеек в Excel
Какие есть офисные средства защиты табличных документов: книги, листа, диапазона ячеек, и как защитить????

Перемещение диапазона ячеек с одного листа на другой
Необходимо с одного листа переместить ячейки ( со второй строки по последнюю не пустую) на другой лист, при этом столбец 2 надо исключить,а...

Копирование диапазона ячеек из одного листа в другой
Подскажите не помогу понять как скопировать в определенное место диапазон ячеек по условию например - с Листа 1 столбец А с 6 строки по...

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

Перенос данных с одного листа на другой при заполнении ячеек
Здравствуйте! я плохо разбираюсь в MS Office Exel и поэтому мне очень нужна ваша помощь. Я рассылаю бланк заказа товара, где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru