![]() |
Всем привет. Есть задачка:
имеется 2 файла: в 1м файле перечень во 2м файле перечень и еще один столбец. Необходимо к перечню 1го файла прикрутить тот столбец что во втором файле, учитывая что перечни не полностью совпадают и расположение совпадающих различно. Пример прилагаетсяв трех файлах:1й файл,2й файл и результирующий. Ошибочный итоговый файл был Вот верный. Реализовать надо в макросе.. В общем все сводится к тому что: есть список(файл1) и есть база (файл2).Из базы в список копируются необходимые данные, если не совпали,то пропускается(остаётся пустая ячейка) |
Вот кривой, помогите поправить и доделать с переносом на новый лист по причине того что встречается несколько раз одно обозначение с разными данными
Код:
Sub osnastka() |
Вот для большей ясности
|
Цитата:
Updated: Один из способов реализовать стандартными способами: в файле 1файл выберите: вкладка "Данные", группа "Получение внешних данных", кнопка "Существующие подключения". В диалоге нажмите кнопку "Найти другие...", в следующем диалоге выберите файл 2файл, лист 1. Способ вставки - таблица, место вставки - новый лист, в свойствах нужно выставить частоту обновлений (только при открытии, каждые 10 минут и т.п.). Данные второго свяжутся с файлом 1 и автоматически будут обновляться , даже если второй файл закрыт. Соответственно в столбец "Закуска" файла 1файл нужно вбить формулу "=ЕСЛИОШИБКА(ВПР(A7;Таблица__2файл;4;ЛОЖЬ);"")" При изменении данный в вашем втором файле соответственно изменится заполнение в фале №1. Для файла "оснастка.xlsx" можно сделать по аналогии. |
Цитата:
|
Цитата:
Код должен храниться в рабочей книге, куда вы хотите скопировать данные. Оба файла должны быть открыты, кроме них рабочих книг открывать нельзя. Логика следующая - код будет копировать данные в ту книгу, где хранится он сам, источником он считает вторую открытую книгу. Заголовки хранятся в строке №1 каждого файла. Столбец с данными для копирования должен иметь номер на единицу больше, чем столбец "№ детали" в файле источнике. Код
Код:
Public Sub osn() |
Я сделал вот так
Скрытый текст
Код:
Sub osnastka() Но есть огромный недостаток-учитывает только первую входимость, а надо все... Для перебора 30к позиций хватает...больше уже вешается... Здесь надо через массивы... Но как хз,я в них ни але Если что - код, в любом случае, будет в надстройке.... Ах да, и как оказалось, столбцов из базы(2 файл) надо брать 3... И располагаются они хаотично.. |
Цитата:
Цитата:
Кроме того, тематических ресурсов по VBA великое множество, помнится у одного из участников подобного форума была очень подходящая к случаю подпись к сообщениям: Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы... . Набейте в любом поисковике VBA и после этого слова подпись - и обязательно найдете этот ресурс с большим количеством материала для вашего самообразования. Лично я бы уделил больше времени самой подписи в силу ее универсальности. |
Цитата:
А на счёт необдимости- это простая задачка, а когда работа будет например с 1,5 млн строк в которых примерно 40 столбцов, тогда перебор увы не покатит. Сейчас в меня полетят какашки по поводу что тут надо что то более сложное, или вооБще аксес или какую нибудь другую прогу по работе с базами данных. Но, есть только Эксель и работаем в том что есть.Как говорится не было б ограничений, все было б проще. Вот был пример http://www.cyberforum.ru/vba/thread1617510-page3.html Но не знаю как к нему прикрутить столбцы |
Цитата:
|
Цитата:
Судя по всему - массивы более компромиссный вариант, правда непонятно, как они тут помогут :). |
Цитата:
На счёт того что отверг-каково задание дали мне, так я его и выложил. Не моя прихоть. А так спасибо за лестные слова :) |
Оффтоп
Цитата:
Цитата:
Цитата:
В мое советское школьное детство преподаватели вбили одну незатейливую истину: правильно и грамотно оформленные условия задачи являются ровно половиной ее решения. Что нужно делать у вас - извините, абсолютно для меня не понятно. Цитата:
Цитата:
Цитата:
Цитата:
Еще раз терпеливо вам объясняю: отсутствие внятной постановки задачи с большой долей вероятности делает невозможным ее решение. Опишите хотя бы Ваше виденье алгоритма: "обработчик в исходном файле ищет ячейку с содержимым "Инструм.", получает номер столбца, перебирает в нем все непустые ячейки, ищет значение каждой из этих ячеек во втором файле, если нашел - копирует значения из столбцов с заголовками такими-то..." и т.д. Вы это формулируете в виде "нужно прикрутить", а что конкретно делать нужно - в общем-то не понятно. Привожу свое интуитивное виденье кода, который вероятно вам нужен. Если вы его просто проигнорируете - как первый код, будто его и не было - возьму самоотвод от участия в этой теме. Запускать код нужно при активном документе, куда вы хотите копировать данные. Открыты д.б. оба документа. код
Код:
Public Sub osn() |
Итак, по коду - постоянно ругается, что не открыты 2 файла, хотя открыты оба и кроме них больше ничего.
В общем задание утряслось и есть чёткие требования. Прикладываю файлы. В первом на первом листе список, на втором итого,что должно получиться. В 2файле несколько вариантов "базы" откуда берутся данные. Уточню ещё один момент, если имеет значение - winXP, office 2010. |
Цитата:
код с проверкой
Код:
Public Sub osn() Отпишитесь по результату, сколько он показывает файлов. Либо можно определить имя файла, из которого будет выполняться копирование. |
Показал верно, отработал криво, не учитывал первые строки. Осталось оформить как в примере на листе итого в предыдущем посте.
|
Пытался сделать из вашего кода чтобы читал из файла не получилось
Код:
Sub osn() |
Время: 10:15. |
Время: 10:15.
© OSzone.net 2001-