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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 13:29   #1
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию могомерные массивы

Нужна помощ в решении одной задачи. Суть в том что я имею 2 exel файла. Один файл это мой ценник другой ценник поставщика. Мне нужно по мануфактурным кодам сравнить ценники и при совпадении скопировать цену у поставщика и подставить себе. при не совпадении в своем ценники поставить прочерк. На данный момент у меня задача эта решена но слишком сложно и медленно. Я загнал свои мануфактурные коды в одномерный массив а далее птем перебора осуществляю поиск у поставщика и по строчно заношу значения в свой ценник (очень долго). Хочу решить это с использованием многомерного массива, но совсем в этом не силен.

пример как я себе это представляю :

p = 3
Do While Range("A" + Trim(Str(p))).Value <> ""
MNkood(p) = Range("A" + Trim(Str(p))).Value
p = p + 1
Loop

загоняю коды со своего ценника в одномерный массив.
Далее перехожу в ценник поставщика и с использованием IF..Then...Else и использовании многомерного массива и еще какогото средства для поиска (быть может Selection.Find)
заношу в массим при совпадении значения при не совпадении знак -(прочерк). Затем возврашаюсь в свой ценник и заполняю на против столбца с мануфактурным кодом в соответствующий столбец, соответстующие значения.

Заранее благодарен.
Vik-00 вне форума Ответить с цитированием
Старый 22.04.2009, 13:39   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если требуется максимально ускорить процесс, то задача сводится к следующему: одной командой заносим данные в массив, затем в памяти делаем все, что требуется, а затем одной командой заносим массив в ячейки листа. Если же использовать построчный перебор, поиск и т.п., то зачем тогда массивы? скорость не увеличится.
Прикрепите пример фрагмента файла (файлов) и подробно опишите задачу. Попробуем "разогнать" скорость выполнения.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.04.2009, 14:28   #3
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Да именно так я и писал, максимально ускорить с использованием многомерного массива.
Вложения
Тип файла: rar Price.rar (14.0 Кб, 14 просмотров)
Vik-00 вне форума Ответить с цитированием
Старый 23.04.2009, 05:35   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Поясните, что в каких столбцах находится? что сравнивать? что предпринимать в том или ином случае?
Я не экономист и не финансист. Не нужно пользоваться такими терминами как "мануфактурный код", "артикул" и т.п. (мне это ни о чем не говорит). Лучше называйте столбцы (строки, листы и т.п.).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2009, 12:11   #5
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Извиняюсь, сейчас попробую уточнить. Я выложил 2 файла один Obraz1MoiCennik.xls в нем Колонка B (M/N Kood) это и есть тот столбец на против которого в столбец D (Post 2) надо проставить значения из файла Obraz2Postavsik.xls столбец B (....discountPrice) если есть совпадения по столбцу F (....manufacturerCode). Если нет совпадений то - (прочерк). Там сечас так и заполнено. Должно совпадать.
Vik-00 вне форума Ответить с цитированием
Старый 23.04.2009, 12:54   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Откройте оба файла и запустите макрос "Main".
В пустой столбец "D" в лист1 файла "Obraz1MoiCennik.xls" будут вставлены цены из столбца "B" второго файла, при совпадении M/N кодов. При несовпадении - будет вставлен прочерк. Все так?
Если все правильно, проверьте на больших файлах и сравните время выполнения задачи. Если что-то не так - пишите, поправим.
Вложения
Тип файла: rar Price_2.rar (18.2 Кб, 14 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2009, 18:56   #7
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Образец работает как надо, возникли проблемы при переносе в действующую модель причем в самом начале и в синтаксисе

Application.ScreenUpdating = False: This Workbooks("test.xls").Sheets("Price ").Activate
With Workbooks("A1.xls").Sheets("Toot")
Vik-00 вне форума Ответить с цитированием
Старый 23.04.2009, 19:11   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Первая строка должна выглядеть так:
Application.ScreenUpdating = False: ThisWorkbook.Sheets("Price").Activate

Или так:
Application.ScreenUpdating = False: Workbooks("test.xls").Sheets("Price").Activate
EducatedFool вне форума Ответить с цитированием
Старый 23.04.2009, 19:55   #9
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Нет оба варианта не правильные, я сам не правильно обьяснил. В примере макрос запускаеться из под дейсвующего листа. А у меня макрос запускаеться отдельно из файла Personal.xls

P.S. пока писал ответ эту ошибку решил действительно Application.ScreenUpdating = False: Workbooks("test.xls").Sheets("Price ").Activate это работает.

Последний раз редактировалось Vik-00; 23.04.2009 в 19:58.
Vik-00 вне форума Ответить с цитированием
Старый 23.04.2009, 20:15   #10
Vik-00
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если что-то не так - пишите, поправим.
Вопрос: нужно пояснение,
i = .UsedRange.Row + .UsedRange.Rows.Count - 1
a = .Range(.[B2], .Cells(i, "F")).Value

F- что значит ?


и еще я споткнулься на If Application.Trim(b(i, 1)) = Application.Trim(a(j, 5)) Then

a-subscript out of range.

C F я думаю разобралься (а может и нет)

Последний раз редактировалось Vik-00; 23.04.2009 в 20:22.
Vik-00 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Представить математическую запись (+описание решения) фрагмента программы и вычислить значение переменной (Kate) Помощь студентам 7 18.10.2011 16:52
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Массивы С++ БаунтЯ Помощь студентам 3 20.02.2009 21:11
Массивы Баламут Win Api 9 12.01.2008 18:57