Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.01.2009, 17:45   #11
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Вообще несколько массивов, наименьший из которых - [5 х 75287520]
... допускал, что есть встроенные методы быстрее чем просто цикл

Кстати, а как тогда сравнить 2 одномерных массива , если есть варианты без цикла (может они будут более быстрыми)
Первый массив на 5 элементов, второй на 20.
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума
Старый 27.01.2009, 18:21   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
несколько массивов, наименьший из которых - [5 х 75287520]
Уверен, что в данном случае надо пересматривать принципы работы программы, и, в особенности, методы хранения и обработки данных.

Если даже каждый элемент массива занимает всего 1 байт (на самом деле больше), то этот наименьший массив отъедает 359 мегабайт памяти.

Объясните, зачем Вы оперируете таким огромным количеством данных (лучше с примером кода), - тогда, возможно, получится найти способ увеличить производительность программы в десятки раз...

Просто оптимизацией поиска в данном случае не обойтись.
EducatedFool вне форума
Старый 27.01.2009, 21:43   #13
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

в иксель (не в VBA) формулы записываются просто..

a1:n555=13 - даст вам массив логических значений..

можно это использовать и в vba

ключевые слова: names, evaluate..

но и перебор достаточно быстро работает, если нужно только сравнить.. в vba довольно неплохой компилятор..

Последний раз редактировалось slan; 27.01.2009 в 21:45.
slan вне форума
Старый 27.01.2009, 22:07   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
a1:n555=13 - даст вам массив логических значений..
можно это использовать и в vba
А как это использовать в VBA?

На листе я понял как - формула массива.

А теперь мне в VBA надо узнать, есть ли в диапазоне [a1:b10] значение "1"

Какой оператор использовать?
чтобы получилось что-то вроде:
Код:
dim present as boolean, arr()
present = evaluate([a1:b10]=1) ' надо узнать, присутствует ли единица в диапазоне ячеек a1:b10
arr=([a1:b10]=1) ' надо получить массив логических значений
EducatedFool вне форума
Старый 28.01.2009, 07:56   #15
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение

На листе я понял как - формула массива.

А теперь мне в VBA надо узнать, есть ли в диапазоне [a1:b10] значение "1"

Какой оператор использовать?
чтобы получилось что-то вроде:
Код:
dim present as boolean, arr()
present = evaluate([a1:b10]=1) ' надо узнать, присутствует ли единица в диапазоне ячеек a1:b10
arr=([a1:b10]=1) ' надо получить массив логических значений
Уважаемый EducatedFool

Я попробывал так
Код:
=ЧАСТОТА(A1:B10;C1)-ЧАСТОТА(A1:D10;C1-1)
где в ячейке C1 число на которое нужно ориентироваться
и не просто есть но и количество совпадений. формула работает для целых чисел, но достаточно заменить C1-1 на C1-минимальное значение
и формула заработает и для нецелых чисел

Может быть я не прав
Юнлинг вне форума
Старый 28.01.2009, 10:16   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если нужно проверить, есть ли конкретное значение в диапазоне ячеек листа, то чем Вас не устраивает метод Find? Быстро и надежно.
Если же речь идет о проверке принадлежности элемента массиву, то без цикла не обойтись.
Вопрос: откуда берется массив? Есть вариант, при формировании массива, формировать еще и коллекцию (или словарь) уникальных значений. Нет ничего проще, проверить есть ли элемент в коллекции. Но при таких объемах???!!!
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 28.01.2009, 12:51   #17
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А как это использовать в VBA?

На листе я понял как - формула массива.

А теперь мне в VBA надо узнать, есть ли в диапазоне [a1:b10] значение "1"

Какой оператор использовать?
чтобы получилось что-то вроде:
Код:
dim present as boolean, arr()
present = evaluate([a1:b10]=1) ' надо узнать, присутствует ли единица в диапазоне ячеек a1:b10
arr=([a1:b10]=1) ' надо получить массив логических значений

пожалуйста - см вложение - в коде листа две процедурки

Код:
Sub test()
    MsgBox [OR(A1:B10=1)]
End Sub
Sub test2()
On Error Resume Next
Names("aaaaaaaaaaa").Delete
Names.Add "aaaaaaaaaaa", "=A1:B10=1"
Dim arr
arr = [aaaaaaaaaaa]
Names("aaaaaaaaaaa").Delete
End Sub
Вложения
Тип файла: rar test.rar (7.3 Кб, 33 просмотров)

Последний раз редактировалось slan; 28.01.2009 в 12:54.
slan вне форума
Старый 28.01.2009, 13:17   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
пожалуйста - см вложение - в коде листа две процедурки
Спасибо за пример кода. Узнал много нового про VBA Excel
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выборка и сравнение из массива Dennikid Общие вопросы Delphi 15 03.10.2008 09:25
добавление массива чисел в базу kate158 БД в Delphi 3 24.09.2008 11:00
Перемещение из массива целых чисел... Си Sota Помощь студентам 1 01.06.2008 19:51
Сравнение чисел с плавающей точкой ? Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 12.04.2008 21:14
Сортировка массива чисел Roberto Помощь студентам 1 02.04.2008 23:19