Поиск строк
Есть книга xls (можно использовать и xlsx, если надо).
В ней множество листов. На каждом листе располагается форма учёта техники: то есть некая шапка и самое главное список техники (карточка учета малоценных и быстроизнашивающихся предметов - Типовая межотраслевая форма № МБ-2). Далее есть второй xls файл - выгрузка из 1С, в котором Наименование, Номер инвентарный и Количество. Что я хочу. Я хочу, чтобы каждая позиция из второго файла сравнивалась по инвентарному номеру с первым файлом (с каждым его листом по всей книге) и количество совпадений записывалось в xls- файл (лучше, конечно, во второй файл в столбец рядом с количеством). В принципе всё сводится к поиску совпадений по всей книге средствами формул - но я не знаю какими формулами воспользоваться для поиска. Может быть есть и более элегантный метод, может лучше вообще использовать Visual Basic. Помогите, пожалуйста. |
Упакуйте в архив и выложите образцы первой и второй рабочих книг.
|
Вложений: 1
Добавил архив с файлами-примерами
|
Примерно так:
Вставьте код в модуль «ЭтаКнига» рабочей книги «Копия ИТ_24 09 14 (Выгрузка из 1С).xls». Откройте рабочую книгу «Карточка учёта техники.xlsx». Выполните процедуру «CountBy()» из приведённого кода. Разумеется, для реальной работы Вам придётся ещё настраивать и настраивать приведённый код под конкретные детали, поскольку это, скорее, макет, не содержащий никаких проверок. |
Iska, спасибо, но для меня без комментариев данный код пока довольно труден.
Покопался на других форумах и нашёл нечто похожее. В файл Карточка учёта техники.xlsx добавил лист "1С" с информацией из книги «Копия ИТ_24 09 14 (Выгрузка из 1С).xls». Макрос сделал в виде функции: Но есть проблема: метод Find ищет на листе только первое упоминание об искомом элементе, а элементов с одним инвентарным номером на листе может быть несколько. Пробовал подобрать цикл поиска по листу типа do Findnext until, но у он у меня не работает :( Можете подсказать как удобнее это сделать? |
Geliosvamp, я не вникал в вашу проблему, но по вашим словам
Цитата:
Код:
With Worksheets(1).Range("a1:a500") |
Цитата:
Рисунок: P.S. Печально, что в Excel нет операции вычитания диапазонов. Или я просто не нашёл? |
Iska, огромное спасибо!
Код работает как надо. Единственное, что переделал: 1. это имена - лучше использовать на английском, а то наблюдаю проблемы с кодировкой 2. заменил в последнем цикле Offcet с 1 на 2, а то число позиций на складе заменялось выданными (видимо этого я и не заметил в первый раз и думал, что скрипт что-то недоделывал) PS: okshef, я пробовал, но у меня что-то с таким циклом не вышло ничего. Убив больше времени на изучение синтаксиса, думаю получилось бы, но уже не надо :) |
Цитата:
Цитата:
|
Iska,
Поясняю примером Скрытый текст
PS: что-то в Google Chrome цитирование не работает ( |
Geliosvamp, перед копированием текста кода из браузера переключите в нём язык ввода на кириллицу, затем выделите и скопируйте код в буфер обмена. Переключитесь на Ваш редактор, переключите в нём язык ввода на кириллицу, затем вставляйте текст из буфера обмена.
Цитата:
|
Цитата:
|
Цитата:
|
Время: 09:35. |
Время: 09:35.
© OSzone.net 2001-