powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA функция для двух массивов
25 сообщений из 25, страница 1 из 1
VBA функция для двух массивов
    #34802661
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
помогите дописать код для создания пользовательской функции.
задав в vba два массива , выполнить поиск в них и найти необходимое значение.
и можно ли сделать выпадающие списки "профиль" и "характеристика" на VBA
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34802893
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри, может чево пригодится.
По поводу 2-х массивов не очень понял...
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34802922
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело в том что у меня есть массив данных
Dim tablepro(1 To 122, 1 To 17)
В этом массиве идет поиск по "профиль" (их 121) и по "характеристика" (их 16)
Если его забить в код VBA ,то VBA ругается, что функция слишком большая ( VBA пишет : procedure too large), видимо есть ограничение на объем функции.
Решил разбить на два массива. При вводе одного (Dim tablepro(1 To 122, 1 To 10)) все рабоате, а как выполнить поиск во втором (Dim tablepro(1 To 122, 1 To 7) - не знаю.
наверное надо делать через SUB, а как!?!
или есть какое еще решение, помимо подключения внешнего файла?
файл с кодм приложил. Книга4.rar
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803098
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на скрытом листе хранить не вариант?
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803131
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, таких массивов будет несколько, в зависимости от "профиль" и "характеристика".
а потом хочу сохранить как НАДСТРОЙКУ.
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803193
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascenНет, таких массивов будет несколько, в зависимости от "профиль" и "характеристика".
а потом хочу сохранить как НАДСТРОЙКУ.

Ну так в настройке на листах и храни
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803194
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad

Ну так в настройке на листах и храни

Ну так в надстройке на листах и храни
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803260
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще я согласен с Deggasad - нужно делать список на листах надстройки. Это и эффективнее и легче для чтения и редактирования. Но если уж очень хоцца, то смотри приложение...

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803267
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)Вообще я согласен с Deggasad - нужно делать список на листах надстройки. Это и эффективнее и легче для чтения и редактирования. Но если уж очень хоцца, то смотри приложение...

KL
[MVP - Microsoft Excel]

=( не открывается
точнее открывается, но Excel выдает ошибку и закрывается
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803270
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
восстановление файла пишет :
Журнал восстановления файлов Microsoft Office Excel

Обнаружены ошибки в файле 'D:\!Downloads\Книга4.xls'
Вот список внесенных исправлений:

Потерян проект Visual Basic.
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803315
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803327
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)а так?

KL
[MVP - Microsoft Excel]
Работает, спасибо огромное!
за оперативность ВАМ цены нет =)
а то мысли уже лезли чуть ли не на разделение на процедуры, с использованием CALL в функции....
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803632
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)а так?

KL
[MVP - Microsoft Excel]

Окончательно заработало , когда поменял
pro = tablepro(Application.Match(nb, tabV, 0) - 1)(Application.Match(Dpro, tabH, 0) - 1)
на
pro = tablepro(Application.Match(Dpro, tabH, 0) - 2)(Application.Match(nb, tabV, 0) - 1)
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803651
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да! Или вместо этого в массиве tabH = Array(0, "b", "t", ..., "P") убрать первый элемент (т.е. 0) как совершенно бесполезный: tabH = Array("b", "t", "r1", ..., "P")

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803670
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Application.Match
очень интересный метод... свойство..., что это?
и где можно прочитать?
В справке нет..
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803678
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascenApplication.Match
очень интересный метод... свойство..., что это?
и где можно прочитать?
В справке нет..
Это функция рабочего листа ПОИСКПОЗ() - в справке по Экселю смотрите.
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34803685
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascenApplication.Match
очень интересный метод... свойство..., что это?
и где можно прочитать?
В справке нет..

Как уже сказал Deggasad, Match - это функция рабочего листа. В VBA является членом коллекции WorksheetFunction, например

Код: plaintext
Application.WorksheetFunction.Match( 22 , Array( 1 , 2 , 22 , 44 , 2 ), 0 )
Код: plaintext
WorksheetFunction.Match( 22 , Array( 1 , 2 , 22 , 44 , 2 ), 0 )

В целях обратной совместимости с версиями предшедствовавшими Office97 был сохранен синтаксис
Код: plaintext
Application.Match( 22 , Array( 1 , 2 , 22 , 44 , 2 ), 0 )

но есть различия - я где-то тут недавно писал

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34804241
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потестировал еще. нашелся глюк.
Если задаешь "характеристика" iu , значение находится, но есть в таблице похожая: Iu (различие в регистре первой буквы), то значение выдается одно и тоже, которое первым попадется в таблице при поиске.
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34804325
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lu - это же LU
l-L(буква "Л" в русском исполнении)
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34804437
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasadlu - это же LU
l-L(буква "Л" в русском исполнении)
нет, в таблице есть 2 "характеристики" с похожим названием iu и Iu
и для "профиль" функция должна бы выдавать соответствующие значения, а она выдает только одно. видимо она приравнивает Iu к iu с считает их одинаковыми.
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34804943
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rascen Deggasadlu - это же LU
l-L(буква "Л" в русском исполнении)
нет, в таблице есть 2 "характеристики" с похожим названием iu и Iu
и для "профиль" функция должна бы выдавать соответствующие значения, а она выдает только одно. видимо она приравнивает Iu к iu с считает их одинаковыми.

Вобще-то это не глюк, а фича как говорят программисты :-) Сделать, чтобы заглавные отличались от строчных можно, но изменение алгоритма наверняка повлечет за собой усложнение кода и серьезную потерю в скорости. Думаю, что дешевле изменить букву в одном из кодов, тем более, что эти коды все равно введены в процедуру как константы.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34805030
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL) Rascen Deggasadlu - это же LU
l-L(буква "Л" в русском исполнении)
нет, в таблице есть 2 "характеристики" с похожим названием iu и Iu
и для "профиль" функция должна бы выдавать соответствующие значения, а она выдает только одно. видимо она приравнивает Iu к iu с считает их одинаковыми.

Вобще-то это не глюк, а фича как говорят программисты :-) Сделать, чтобы заглавные отличались от строчных можно, но изменение алгоритма наверняка повлечет за собой усложнение кода и серьезную потерю в скорости. Думаю, что дешевле изменить букву в одном из кодов, тем более, что эти коды все равно введены в процедуру как константы.

KL
[MVP - Microsoft Excel]
понятно, придется изменить, раз "фича" =).
есть ли возможность прочитать массив tabV = Array() и сделать выпадающий список, чтобы была возможность выбирать в любой необходимой ячейке текущего листа значения из этого масива?
больше вопросов,вроде, нет
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34805203
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rascenесть ли возможность прочитать массив tabV = Array() и сделать выпадающий список, чтобы была возможность выбирать в любой необходимой ячейке текущего листа значения из этого масива?
Если речь о меню Данные-Проверка и надо обойтись без копирования массива в диапазон на листе , то в Excel97-2003 tabH можно (функция Join дост):

Код: plaintext
1.
2.
3.
4.
5.
6.
Sub test()
    tabh = Array( 0 , "b", "t", "r1", "r2", "A", "Iy=Iz", "Wy", "iy", "Iu", "iu", "Iv", "Wvo", "iv", "Iyz", "yo", "P")
    With Range("C1").Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Join(tabh, ",")
    End With
End Sub

а tabV , если не ошибаюсь, - нельзя (в Excel2007 - можно), т.к. меню Данные-Проверка позволяет текстовую строку до 255 знаков. Но на всякий случай проверь.

Если копирование массива в диапазон на листе - не рассматривается, то остается использовать контрол ActiveX ComboBox .

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34805218
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не дописал про функцию Join :-) Эта функция доступна начиная с Excel2000

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
VBA функция для двух массивов
    #34805397
Rascen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL) Rascenесть ли возможность прочитать массив tabV = Array() и сделать выпадающий список, чтобы была возможность выбирать в любой необходимой ячейке текущего листа значения из этого масива?
Если речь о меню Данные-Проверка и надо обойтись без копирования массива в диапазон на листе , то в Excel97-2003 tabH можно (функция Join дост):

Код: plaintext
1.
2.
3.
4.
5.
6.
Sub test()
    tabh = Array( 0 , "b", "t", "r1", "r2", "A", "Iy=Iz", "Wy", "iy", "Iu", "iu", "Iv", "Wvo", "iv", "Iyz", "yo", "P")
    With Range("C1").Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Join(tabh, ",")
    End With
End Sub

а tabV , если не ошибаюсь, - нельзя (в Excel2007 - можно), т.к. меню Данные-Проверка позволяет текстовую строку до 255 знаков. Но на всякий случай проверь.

Если копирование массива в диапазон на листе - не рассматривается, то остается использовать контрол ActiveX ComboBox .

KL
[MVP - Microsoft Excel]

дописал, спасибо!
Пока так.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA функция для двух массивов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]