С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87

Использование стандартных функций в макросе

05.09.2016, 12:22. Показов 5302. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги,
доброго времени суток.
Туплю уж извините, но не могу решить простую проблему, собственно задача такая: есть исходный документ. В нем перечисляются наименования закупаемых материалов. Есть другой документ, в котором материалы перечислены однократно но им соответствует еще один параметр - человек который закупает данный материал. Знаю, что ВПР решает данную задачу влет, но мне надо чтобы пенсионер не сильно задумывался, как это писать, потому что есть проблемка, столбец с ключевыми материалами может в разных файлах отличаться. Собственно я решил написать собственную функцию, которой на вход подается только значение ячейки с материалом, а далее система сама вызывает ВПР с данным входным параметром и все делает.
Но не могу вызвать сам ВПР, подможите кто понимает!

Visual Basic
1
2
3
4
5
Function maker(pos As Range) As Variant  '(определяю функцию Maker с входным параметром позиции ячейки из которой брать название материала)
 
maker = Application.WorksheetFunction.VLookup(pos, [Лист!RC[-9]:R[471]C[-8]], 2, 0)' (собственно пытаюсь запустит ВПР с входным параметром pos - номер входящей ячейки)
 
End Function
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2016, 12:22
Ответы с готовыми решениями:

Использование стандартных функций в UserForm VBA
Как использовать функции Excel-я, (например макс, впр, и др.), в VBA? например, в ячейках А1 и B1 находятся значения, по нажатию...

Вычисление функций формулы в самом макросе
Здравствуйте, нужна помощь в таком вопросе. Есть макрос (пример приложил), он сейчас получается банально копирует значения из...

Использование \1 вместе юникодом в макросе Word
Здравствуйте! Почему не удается заменить .replacement.text = "«\1»" на .replacement.text = "" ? Можно ли \1 как-то представить во втором...

12
3946 / 2339 / 790
Регистрация: 02.11.2012
Сообщений: 6,214
05.09.2016, 13:11
правильно задайте диапазон поиска.
так [Лист!RC[-9]:R[471]C[-8]] не правильно.

п.с. оформляйте код тегами (например кнопка VB)
0
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87
05.09.2016, 13:43  [ТС]
Это для простоты я пока тренируюсь искать на "соседнем" листе. Как пойдет макрос, я его на фаил ориентирую. Меня больше смущает, что есть Application.WorksheetFunction.vlookup, не нет того же для ВПР. Возможно поэтому не ищет. И вообще, правильный ли подход вызова встроенной функции...
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
05.09.2016, 13:51
vlookup = ВПР
не понял фразы " есть Application.WorksheetFunction.vlookup, не нет того же для ВПР."
А синтаксис применения функции в макросе даёт запись этого применения в макрос рекордером.
0
3946 / 2339 / 790
Регистрация: 02.11.2012
Сообщений: 6,214
05.09.2016, 14:05
Цитата Сообщение от Solitary_Dale Посмотреть сообщение
искать на "соседнем" листе
так и пишите
Visual Basic
1
maker = Application.WorksheetFunction.VLookup(pos, Sheets("Лист").Range("A1:C100"), 2, True)
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
05.09.2016, 14:06
Solitary_Dale,
приложите файлы, если можно...
0
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87
05.09.2016, 14:33  [ТС]
Коллеги, попробую перефразировать задачу. Для бабушки, которой бессмысленно объяснять что такое ВПР я хочу создать функцию одной переменной, на вход которой будет подаваться значение ячейки, по которой ВПР должен осуществлять поиск. Все остальные параметры функции всегда константа.
Вложения
Тип файла: rar Пример заполнения.rar (90.9 Кб, 7 просмотров)
0
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87
05.09.2016, 14:39  [ТС]
Vlad999,
попробовал, всеравно дает ошибку #знач возможно я что-то некорректно пишу в типах данных самой функции

Function maker(pos As Range) As Variant
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.09.2016, 14:49
Лучший ответ Сообщение было отмечено Solitary_Dale как решение

Решение

Visual Basic
1
2
3
Function Maker(Cell As Range) 'As Variant
    Maker = Application.VLookup(Cell, Range("Лист1!A:B"), 2, 0)
End Function
Code
1
B2=Maker(A2)
1
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87
05.09.2016, 14:55  [ТС]
pashulka,
Да это оно!
Правильно тогда я понимаю, что если я выношу таблицу, где осуществляется поиск в другой фаил, то в Range добавляется путь и имя файла?
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.09.2016, 15:11
Рабочая книга-источник должна быть открыта, поэтому путь указывать не нужно, т.е. достаточно :

Visual Basic
1
Range("'[Таблица 1.xlsx]Лист1'!A:B")
0
 Аватар для Solitary_Dale
1 / 1 / 0
Регистрация: 05.07.2016
Сообщений: 87
05.09.2016, 16:38  [ТС]
pashulka,
Да вот не хотелось бы открывать.
Подозреваю, что поле Range дополнится только путем в этом случае. Или есть какая-то тонкость о которой я не подозреваю?

не находит при открытом файле:

Function Maker(Cell As Range) 'As Variant
Maker = Application.VLookup(Cell, Range("'[Справочник материалов.xlsx]Лист1!'C:G"), 5, 0)
End Function

С и G у меня другой диапазон данных для поиска.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.09.2016, 17:21
Нет никакой тонкости, об'екта Range у закрытой книги просто не существует. Но если книга не должна открываться пользователем, можно (на выбор)

1) открыть её программно (например, при открытии книги с функцией), получить необходимый массив данных и, в дальнейшем, работать именно с этим массивом
2) создать именованную формулу, содержащую функцию ВПР() и уговорить вводить Вашу бабушку именно это имя.

Это называется, куда переместился апостроф, а главное зачем ...

Цитата Сообщение от pashulka Посмотреть сообщение
Лист1'!
Цитата Сообщение от Solitary_Dale Посмотреть сообщение
Лист1!'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2016, 17:21
Помогаю со студенческими работами здесь

Использование математических функций и функций работы со строками
Составить процедуру для вычисления и печати значений переменных y и z для заданных значений переменной x, в соответствии с вариантом. ...

Отсутствие "стандартных" функций
И раньше сталкивался с таким, но там задачи были простые и проблема легко обходилась, поэтому не придавал значения. А сейчас что...

Использование строковых функций
Нужно из введённого текста вывести слова заданной длинны.

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

Использование подпрограмм-функций в программах
Помогите кто-нибудь, пожалуйста!? - сойду с сума от непонимания.. (( НУЖНО: Составить программу вычисления функции У, используя...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru