|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.04.2009, 13:29 | #1 |
Пользователь
Регистрация: 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) заношу в массим при совпадении значения при не совпадении знак -(прочерк). Затем возврашаюсь в свой ценник и заполняю на против столбца с мануфактурным кодом в соответствующий столбец, соответстующие значения. Заранее благодарен. |
22.04.2009, 13:39 | #2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Если требуется максимально ускорить процесс, то задача сводится к следующему: одной командой заносим данные в массив, затем в памяти делаем все, что требуется, а затем одной командой заносим массив в ячейки листа. Если же использовать построчный перебор, поиск и т.п., то зачем тогда массивы? скорость не увеличится.
Прикрепите пример фрагмента файла (файлов) и подробно опишите задачу. Попробуем "разогнать" скорость выполнения.
Чем шире угол зрения, тем он тупее.
|
22.04.2009, 14:28 | #3 |
Пользователь
Регистрация: 15.04.2009
Сообщений: 20
|
Да именно так я и писал, максимально ускорить с использованием многомерного массива.
|
23.04.2009, 05:35 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Поясните, что в каких столбцах находится? что сравнивать? что предпринимать в том или ином случае?
Я не экономист и не финансист. Не нужно пользоваться такими терминами как "мануфактурный код", "артикул" и т.п. (мне это ни о чем не говорит). Лучше называйте столбцы (строки, листы и т.п.).
Чем шире угол зрения, тем он тупее.
|
23.04.2009, 12:11 | #5 |
Пользователь
Регистрация: 15.04.2009
Сообщений: 20
|
Извиняюсь, сейчас попробую уточнить. Я выложил 2 файла один Obraz1MoiCennik.xls в нем Колонка B (M/N Kood) это и есть тот столбец на против которого в столбец D (Post 2) надо проставить значения из файла Obraz2Postavsik.xls столбец B (....discountPrice) если есть совпадения по столбцу F (....manufacturerCode). Если нет совпадений то - (прочерк). Там сечас так и заполнено. Должно совпадать.
|
23.04.2009, 12:54 | #6 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Посмотрите вложение. Откройте оба файла и запустите макрос "Main".
В пустой столбец "D" в лист1 файла "Obraz1MoiCennik.xls" будут вставлены цены из столбца "B" второго файла, при совпадении M/N кодов. При несовпадении - будет вставлен прочерк. Все так? Если все правильно, проверьте на больших файлах и сравните время выполнения задачи. Если что-то не так - пишите, поправим.
Чем шире угол зрения, тем он тупее.
|
23.04.2009, 18:56 | #7 |
Пользователь
Регистрация: 15.04.2009
Сообщений: 20
|
Образец работает как надо, возникли проблемы при переносе в действующую модель причем в самом начале и в синтаксисе
Application.ScreenUpdating = False: This Workbooks("test.xls").Sheets("Price ").Activate With Workbooks("A1.xls").Sheets("Toot") |
23.04.2009, 19:11 | #8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Первая строка должна выглядеть так:
Application.ScreenUpdating = False: ThisWorkbook.Sheets("Price").Activate Или так: Application.ScreenUpdating = False: Workbooks("test.xls").Sheets("Price").Activate |
23.04.2009, 19:55 | #9 |
Пользователь
Регистрация: 15.04.2009
Сообщений: 20
|
Нет оба варианта не правильные, я сам не правильно обьяснил. В примере макрос запускаеться из под дейсвующего листа. А у меня макрос запускаеться отдельно из файла Personal.xls
P.S. пока писал ответ эту ошибку решил действительно Application.ScreenUpdating = False: Workbooks("test.xls").Sheets("Price ").Activate это работает. Последний раз редактировалось Vik-00; 23.04.2009 в 19:58. |
23.04.2009, 20:15 | #10 |
Пользователь
Регистрация: 15.04.2009
Сообщений: 20
|
Вопрос: нужно пояснение,
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. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Представить математическую запись (+описание решения) фрагмента программы и вычислить значение переменной | (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 |