Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сравнение таблиц Exsel / 25 сообщений из 40, страница 1 из 2
04.11.2011, 00:08
    #37511422
Slava1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Доброго времени суток!
Есть две таблице(книги) exsel с двумя столбцами id и fio, как сравнить две этих таблице и в третью поместить результат сравнения. Таблицы сравниваются по id, т.е. если в первой таблице есть строка ID=1111 и во второй ID=1111 то эту строку нужно поместить в третью таблицу. Строк около 10000 в одной таблице и около 5000 в другой... вреде как то так)
...
Рейтинг: 0 / 0
04.11.2011, 00:49
    #37511443
Slava1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Slava1234,
Извиняюсь за ошибку)))
...
Рейтинг: 0 / 0
04.11.2011, 02:10
    #37511470
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
"Результат" берется из первой таблицы? из второй?
Вообще, средствами Экзель - это функции листа ВПР(), ПРОСМОТР(), ...
Если хотите увидеть пример - приложите пример ваших таблиц...
...
Рейтинг: 0 / 0
04.11.2011, 12:45
    #37511660
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Slava1234,

Попробуйте программу Игоря(Hugo121).
...
Рейтинг: 0 / 0
06.11.2011, 13:16
    #37513254
Slava1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Вот пример что нужно)
...
Рейтинг: 0 / 0
06.11.2011, 13:17
    #37513255
Slava1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Slava1234,
...
Рейтинг: 0 / 0
06.11.2011, 14:09
    #37513283
Slava1234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Slava1234,

Сравнение по тел. номерам
...
Рейтинг: 0 / 0
06.11.2011, 14:50
    #37513312
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Slava1234,
ИМХО лучше SQL запросом. Быстрей. Любимый конек R Dmitry:-) Подождем, он был сегодня на форуме. На будущее - лучше всегда выложить файлы с хотелками. И себе решение ускорите и других избавите от ненужных телодвижений.
...
Рейтинг: 0 / 0
06.11.2011, 17:02
    #37513427
R Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
можно выполнить из любого файла, только изменить название путей к файлу и следить как называются листы в файлах

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Public Function ADO_R_Dmitry(ByVal StrSQL$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL  запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'* если FieldsName=False, заголовки не выводятся.
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry)          |
'* WM:_R269866874234 U144446690328                                            |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case CLng(Split(Application.Version, ".")( 0 ))
    Case Is <  12 
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
          & ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
    Case Is >=  12 
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
        & ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State =  1  Then Exit Function
Set rs = cn.Execute(StrSQL)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i =  0  To rs.Fields.Count -  1 
    OutputRange.Offset( 0 , i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset( 1 ,  0 )
 End If
 DoEvents
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
Sub test()
Dim StrSQL$
Sheets( 1 ).[a1].CurrentRegion.ClearContents
StrSQL = "SELECT A.[MOB_NUM], A.[ACC], A.[TARIF_NAME], A.[NAME], A.[DILER_NAME], A.[ADATEFULL], A.[FD], A.[SIM_CARD_N], A.[DOGOVOR], A.[PDATE]" _
& " FROM [Лист1$] as A INNER JOIN " _
& "`C:\Documents and Settings\Дмитрий\Рабочий стол\тест\Реестр по ТС.xls`.[Лист1$] as b ON A.MOB_NUM = b.Федномер"
Call ADO_R_Dmitry(StrSQL, "C:\Documents and Settings\Дмитрий\Рабочий стол\тест\Активация.xls", Sheets( 1 ).[a1], True, True)
End Sub


...
Рейтинг: 0 / 0
06.11.2011, 17:11
    #37513431
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Не вижу в таблицах ни ID, ни FIO
Сравнивать можно, как я понимаю, по номеру СИМ, номеру договора, тномеру телефона...
Быстрый и "простой" - делать запрос помощью ADODB к нужным данным исходных таблиц, в нем же, если надо, накладывая дополнительные условия.
...
Рейтинг: 0 / 0
06.11.2011, 17:17
    #37513438
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Пропустил, что Дмитрий уже ответил...
Хотя у меня в примере - предложение делать коннект не через JET, а через ODBC, что избавляет от контроля версии Офиса. Раз по телефонному номеру надо сравнивать - замените в запросе поля на нужные.
Кстати, можно не перечислять все поля в SELECT, а сделать "SELECT * FROM ...", и потом почистить два последних столбца результата...
...
Рейтинг: 0 / 0
06.11.2011, 17:34
    #37513455
R Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
AndreTM,

Можно конечно. :)
...
Рейтинг: 0 / 0
06.11.2011, 18:24
    #37513505
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
R Dmitry,

Это я ТСу советовал... Поскольку если начнет пользоваться запросами - лишние знания/умения не помешают никогда.
...
Рейтинг: 0 / 0
06.11.2011, 19:04
    #37513539
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
AndreTM,
вероятно пока ещё не начнёт - я ему на программерс сделал на словаре и массивах. Очень просил, денег обещал дать :)
...
Рейтинг: 0 / 0
06.11.2011, 19:47
    #37513563
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
За что и не люблю кросспостеров. Нафиг, люди стараются...
...
Рейтинг: 0 / 0
06.11.2011, 20:16
    #37513578
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
kuklp, зато у других есть теперь несколько вариантов.
Хотя у меня вариант AndreTM не работает - т.е. нет результата... :(
...
Рейтинг: 0 / 0
06.11.2011, 21:04
    #37513614
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Игорь, т.е. ты считаешь, что это есть благо?
А на одном форуме автор бы решения не получил? Дело даже не в том.
>> Хотя у меня вариант AndreTM не работает...
это что, показатель? Такого не было, что твой(мой) варианты не работали из-за бестолковости ТС? Я вот смотрю, до сих пор ТС не отписался, хотя получил нужное во многих вариантах. Не, я не претендую на истину в последней инстанции, бурчу(это старческое:-)), но все же ИМХО, это неправильно.
...
Рейтинг: 0 / 0
06.11.2011, 21:18
    #37513629
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
kuklp,
Ну не знаю...
С точки зрения целесообразности - есть смысл. Тут вариант на SQL, там на массивах, может ещё где-нибудь на MSQuery (файл *.dqy) - тоже кстати вариант неплохой, удобный, если имена файлов известны. А если неизвестны, то можно vbs скриптом запросить, сгенерить *.dqy, запустить на выполнение :)
Есть выбор, не факт, что на одном форуме будет лучшее решение.
Но мне кажется, что мой вариант лучше :) Хотя бы потому, что более управляемый - можно на лету откидывать пробелы, менять типы данных, добавлять доп.условия отбора и т.д.
...
Рейтинг: 0 / 0
06.11.2011, 21:21
    #37513631
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Что-то я пропустил, или мне показалось - ты меня бестолковым назвал??? :)
А за ТС похоже что я отписался - мой вариант с программерс подошёл.
...
Рейтинг: 0 / 0
06.11.2011, 21:27
    #37513633
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Hugo121,

Ну, результата может не быть по причине отсутствия совпадений по ключу...

И по причине того, что не отрабатывает ODBC при отсутствии источников - вполне. Тогда попробуйте, например, вот это (файлы-источники должны лежать в каталоге с рабочей книгой). В целом, ТСу ведь советовали путь решения, и он достаточно кошерен , а уж частности... - пусть учится.
...
Рейтинг: 0 / 0
06.11.2011, 21:30
    #37513636
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Hugo121Что-то я пропустил, или мне показалось - ты меня бестолковым назвал??? :)
Да ладно тебе:-) Я и себя в скобках указал.
Ты же помнишь тему, у всех работало, а у тебя - нет. Я уж правда и не вспомню, почему. Но помню, что в последствии и у тебя заработало. Потому как НЕ бестолковый:-)
П.С. это че было? Наезд?:-)
...
Рейтинг: 0 / 0
06.11.2011, 21:43
    #37513642
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
Да ладно вам... ТС ведь давно ушел, удовлетворенный по самую маковку.
Hugo121Но мне кажется, что мой вариант лучше :) Хотя бы потому, что более управляемый - можно на лету откидывать пробелы, менять типы данных, добавлять доп.условия отбора и т.д.Ага, SQL Select этим не обладает принципиально, типа
...
Рейтинг: 0 / 0
06.11.2011, 22:22
    #37513672
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
AndreTM, это почему? SQL запрос не обладает гибкостью? От Вас первого такое слышу. Язык SQL и популярен на любых платформах из-за его гибкости. Боюсь, Дима(R Dmitry) тут будет Вам лучшим опонентом, чем я:-)
...
Рейтинг: 0 / 0
06.11.2011, 22:22
    #37513673
R Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
AndreTMАга, SQL Select этим не обладает принципиально, типа

+100500
...
Рейтинг: 0 / 0
06.11.2011, 22:26
    #37513676
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение таблиц Exsel
AndreTM,
ну я не настолько знаю SQL, мне проще массивами управлять.
Но помню, что с типами данных там были проблемы...
Тут тоже я в первом варианте не учёл, что они могут отличаться - я когда тестировал, забил в середину номеров буквы, чтоб совпадений не было, а когда вернул назад - совпадений тоже нет :(. Оказалось, что типы скачут - добавил всюду Trim(), заодно два зайца убил.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сравнение таблиц Exsel / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]