Страницы: 1
RSS
Сравнить данные в двух сторонних книгах и записать значение при совпадении, Помогите пожалуйста
 
Уважаемые дамы и господа!
Помогите пожалуйста.
Дано три файла:
Шаблон.xlsm
Данные.xlsx
Прайс.xlsx
Задача: во время импорта данных, нужно сравнить данные в двух книгах (Данные.xlsx и Прайс.xlsx) и записать значение при совпадении в Шаблон.xlsm
Красным подчеркнуты столбцы, которые нужно сравнивать
Зелёным подчеркнуто то, что совпадает при сравнении
Синим подчеркнуто значение, которое при совпадении нужно записать в Шаблон.xlsm в графу Код
Скрытый текст
Изменено: AndreiSMT - 10.12.2024 19:43:53
 
AndreiSMT, можно сперва открыть Прайс, собрать в словарь ключи из трёх столбцов, затем уже из Данные брать только те строки что есть в словаре.
Где-то вот тут
Код
For I = LBound(arr1C, 1) To UBound(arr1C, 1)

Ещё по коду - кусок
Код
    With Application.WorksheetFunction
      arr(I, 7) = arr1C(I, 5) / 1.2
      arr(I, 9) = arr1C(I, 4) * arr1C(I, 5)
    End With

что по задумке должен делать?

И строка
Код
arrPrice = Worksheets("Price").ListObjects("tblPrice").DataBodyRange.Value

вероятно забылась тут случайно...
Изменено: Hugo - 10.12.2024 22:01:41
 
Сделал, но нужно ещё повозиться чтоб массив не создавался с лишними строками, думаю проще в конце создать другой, и переложить в него. Но лениво, справитесь ведь?
Скрытый текст

P.S. Пути поправьте на свои, тоже можно доработать что-то если охота.
Изменено: Hugo - 10.12.2024 22:23:28
 
Hugo, спасибо что откликнулись, но дело в том что я в этом совершенно ничего не понимаю.
Макрос, который уже присутствует в Шаблон.xlsm, написал модератор этой ветки, господин Sanja.
К сожалению тест обрывается ошибкой  :(
Скрытый текст
 
AndreiSMT, Доброго времени суток!
А зачем вы плодите данную тему на соседнем форуме? А по существу вам выдало сообщение что нет в данном проекте процедуры с именем ResetTable. Возможно вы её удали или что. Ищите её у себя. Файлы не смотрел. Удачи.
Изменено: MikeVol - 12.12.2024 12:30:04 (Дополнил ответ ссылкой на соседний форум.)
 
AndreiSMT, у меня отрабатывало нормально, вот тот файл приложил.
Нужно было заменить только один этот макрос, а не всё что есть в модуле.
В коде поправьте пути на свои.
Изменено: Hugo - 12.12.2024 14:13:10
 
Hugo, большое вам спасибо.
Если вас не затруднит посмотрите пожалуйста ещё раз этот макрос. Маленький нюанс.
Нужно чтобы из файла Данные.xlsx импортировались все строки, даже если в файле Прайс.xlsx нет совпадающих строк. Т.е. в коде, который вы написали, нужно где-то добавить условие, если совпадений нет, пусть эта ячейка будет пустой.
В текущем файле Прайс.xlsx не хватает нескольких совпадающих строк, но нужно чтобы из файла Данные.xlsx импортировались все строки.
Изменено: AndreiSMT - 12.12.2024 15:59:00
 
Т.е. концепция поменялась? ))
Тогда просто всюду в цикле в строках с
Код
arr(ii,

замените ii на I
А переменную ii можно вообще убрать.
Получите дырявый массив, как заказываете.
Изменено: Hugo - 12.12.2024 22:51:13
 
Цитата
Hugo написал:
Т.е. концепция поменялась? ))
Концепция рождается по ходу действия, сочувствую)))
Согласие есть продукт при полном непротивлении сторон
 
Hugo, Sanja, я так понял вы с сарказмом шутите над глупым юзером,  :)
а я понять немогу почему все строки не импортируются.
Помогите пожалуйста. Я вас очень очень прошу  :)
Заменил все ii на I, и переменную ii тоже убрал, но изменений не произошло.
Все строки, у которых нет совпадений всё равно пустые, а я хотел чтобы пустые были только ячейки в графе Код.
Т.е. чтобы вот так было:
Скрытый текст
Я только теперь понял, что не уточнил этот момент сразу. Простите меня пожалуйста  :oops:  
 
AndreiSMT, нужно было сразу показать готовый ожидаемый результат, ну и пример должен быть такой чтоб этот результат из данных можно получить.
А не вот это всё...
По первому столбцу - он заполняется вместе со всеми данными после проверки по словарю.
Значит теперь только первый столбец нужно заполнять по проверке, остальное копировать всегда.
Вот это нужно сделать так:
Код
If d.exists(t) Then  arr(i, 1) = d.Item(t)

Итого:
Скрытый текст
 
Hugo, да, теперь всё отлично!
Большое вам спасибо!
Страницы: 1
Наверх