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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2010, 18:11   #1
serg5777
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию Сопоставление экселевских файлов

Помогите сопоставить 2 экселевских файла один сделан ранее (1 месяц назад), а другой только вчера.
Что требуется:
Вывести формулу для вычисления которая поможет определить какие значения изменились в новом файле по сравнению со старым.
В новом файле по сравнению со старым изменяется ТОЛЬКО значения в столбце Е, я эту формулу вывел всё работает, а проблема заключается в том что в новом файле появляются
новые строки и в следствии этого сопоставить файлы с целью изменения значений никак не удастся.
В архиве прилагается маленький пример как это все происходит. На самом же деле в реальном файле более 50к значений, поэтому вручную их нереально просмотреть.
Помогите с этой проблемкой. Спасибо

Архив с эксельками лежит здесь http://zalil.ru/29712827
serg5777 вне форума Ответить с цитированием
Старый 22.09.2010, 19:35   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

А если макросом?
Есть макрос в файле http://excel.ucoz.ru/index/comparefiles_find/0-25
Под Вашу задачу надо два раза прогонять - сперва отмечаем записи, которые появились (т.е. котрых нет в старом файле), затем все, которые отличаются по колонке Е.
В итоге получите типа

Код:
9090	lol	В1620750		1		NotFind	
9097		В3137993		1		NotFind	NotFind
Где один раз NotFind - поменялось в Е, где два раза - новая запись полностью.

15 запусков совершенно бесплатно. На полгода хватит.

P.S. Можно и иначе использовать.

Можно конечно сделать формулами, но на 50к - замучаетесь.
Или может nilem на массивах сделает быстрый вариант кода именно под эту задачу.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 22.09.2010 в 19:38.
Hugo121 вне форума Ответить с цитированием
Старый 22.09.2010, 19:39   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте serg5777.
Ваша, как и все подобные ей задачи обработки табличных данных, могут быть решены (и успешно решаются) с использованием библиотеки ADO и SQL, "инструментов" применяющихся при работе с БД (базами данных).
Евгений.
Вложения
Тип файла: rar Compare.rar (12.3 Кб, 30 просмотров)
Teslenko_EA вне форума Ответить с цитированием
Старый 22.09.2010, 19:47   #4
serg5777
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А если макросом?

Код:
9090	lol	В1620750		1		NotFind	
9097		В3137993		1		NotFind	NotFind
Но так у вас не видно какие значения изменились, а какие добавились...
serg5777 вне форума Ответить с цитированием
Старый 22.09.2010, 19:48   #5
serg5777
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте serg5777.
Ваша, как и все подобные ей задачи обработки табличных данных, могут быть решены (и успешно решаются) с использованием библиотеки ADO и SQL, "инструментов" применяющихся при работе с БД (базами данных).
Евгений.
Запустил файл, но ничего не происходит..
serg5777 вне форума Ответить с цитированием
Старый 22.09.2010, 20:33   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Цитата:
Сообщение от serg5777 Посмотреть сообщение
Но так у вас не видно какие значения изменились, а какие добавились...
как это не видно? Я же написал - одна пометка - изменились, две - добавились. Но запускать код два раза с чуть изменёнными настройками. И на 50к*50к будет небыстро, минут 10 может. Сейчас замерю проход.
Да, небыстро - около часа получится. Но у меня машина небыстрая...

Замерил 10к*10к - отработало за 6 минут. 50к*50к получается 2.5 часа.... И два прохода надо - день работы. Это если машину больше ничем не нагружать. Нет, надо на массивах делать, именно под задачу. Я как-то мерился с АДО - массивы быстрее были.
Вот, нашёл - http://www.programmersforum.ru/showp...7&postcount=12
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 22.09.2010 в 21:11.
Hugo121 вне форума Ответить с цитированием
Старый 23.09.2010, 12:23   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вот, на массивах, должно справится с 50к за 17 минут (10к сделал за 42 сек.)
Поставьте свой путь.
Код положить в модуль в new.xls.
Вместо e50001 и g50001 поставьте свои максимальные адреса (лениво было код усложнять).
Код:
Option Explicit

Sub CompareArr()
Dim a, b, c, i As Long, ii As Long
Dim tm
tm = Timer

a = Sheets(1).[a2:e50001]
b = Workbooks.Open("C:\temp\serg5777\old.xls").Sheets(1).[a2:e50001]
ReDim c(1 To UBound(a), 1 To 2)
For i = 1 To UBound(a)
For ii = 1 To UBound(b)
If a(i, 1) = b(ii, 1) Then
If a(i, 2) = b(ii, 2) Then
If a(i, 3) = b(ii, 3) Then
c(i, 1) = "find"
If a(i, 5) <> b(ii, 5) Then c(i, 2) = "diff"
Exit For
End If
End If
End If
Next ii, i
ThisWorkbook.Sheets(1).[f2:g50001] = c
Debug.Print Timer - tm
MsgBox Timer - tm
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.09.2010 в 12:33.
Hugo121 вне форума Ответить с цитированием
Старый 23.09.2010, 21:29   #8
serg5777
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

Спасибо, буду разбираться)
serg5777 вне форума Ответить с цитированием
Старый 25.09.2010, 11:53   #9
serg5777
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

В общем я не стал париться с массивами, БД я всё решил сделать из под собственно самого экселя в режиме совместимости, я вывел формулу и всё отлично работает.
Только вот проблема в том что 3к строк обрабатывается 25 минут.
Это нормально? И можно ли как-нибудь ускорить работу?
serg5777 вне форума Ответить с цитированием
Старый 25.09.2010, 13:35   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Если отвергаете макрос - никак нельзя. Если только сводной попробовать - но тут я не специалист...
Если формула на 3к отработала за 25 минут, то на 50к будет работать 6944,444444 минут. Это почти 5 суток. Хотя может я и ошибся в рассчётах.
Может лучше разобраться и сделать за 17 минут?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.09.2010 в 13:38.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сопоставление двух таблиц Miku Microsoft Office Excel 2 25.07.2009 21:48
Сопоставление 2х фалов в exel Kaddy Microsoft Office Excel 1 26.03.2009 19:29
Сопоставление моделей cartoongirl Microsoft Office Excel 6 21.04.2008 14:35