Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/146: Рейтинг темы: голосов - 146, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
1

Сравнить две таблицы на листе в Excel

16.03.2010, 22:28. Показов 27611. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Форумчане, доброго времяни суток)
Ковыряясь в Excel VBA сталкнулся с проблемкой для себя,и хотелось бы найти способ реализации,ради чего пишу,Вам.

Ситуация:
Имеются две таблицы, на одной из страниц Excel, Табл1 и Табл2,причем у обеих таблиц мы знаем ячейку(верхний левый угол) с которой таблици будут заполнятся,таблицы могут принимать разное колличество строк и столбцов. Таблицы грузятся из базы данных, результат(нажатие на кнопку)-вывод "окна" таблицы равны или нет.
Слышал, что есть возможность у Excel по средствам VBA определять размеры таблиц,и таким образом вначале сравнить их по колличеству столбцов и строк, а затем по содержимому ячеек,причем столбцы таблицы могут меняться местами(за ошибку это не учитывается).
Вот,что то в этом стиле,вдруг кто сталкивался с этим,черкните,буду ток благодарен,или хорошую ссылочку ,тож не помешает,так как таблицы я загрузил,нужно савнить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2010, 22:28
Ответы с готовыми решениями:

Сравнить две таблицы Excel
Ребят подскажите. Хочу немного упростить себе задачу, а точней автоматизировать сравнение столбцов...

Сравнить в Excel две таблицы по разным параметрам
Добрый всем день! помогите пожалуйста, есть две таблицы с разным кол-вом столбцов (14 и 8) и...

Сравнить ячейки на первом листе и на втором листе, в случае несовпадения удалить
Задача такая,В Exel есть несколько ячеек с данными String на первом листе и на втором листе. Я...

Сравнить две таблицы
Необходимо сравнить две таблички, в первом листе в одном столбике неповторяющееся номера, а в...

22
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
16.03.2010, 22:52 2
здесь посмотри определение кол-ва столбцов Добавление столбца.
по заголовкам: наверное поместить все заголовки в массив, упорядочить массивы, сравнить массивы с помощью Like. по сравнению данных, я так понял, проблемм нет?
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
16.03.2010, 23:25  [ТС] 3
А можно если тя не затруднить на примере показать,ну чтоб наглядно иметь представление. Например Табл1 с записями:

Фамилия Пол Диагноз Отделение
Минин муж Врожденный порок сердца Кардиологическое
Вишников муж Хронический ревматизм Кардиологическое
Кубышев муж Реактивный артрит Кардиологическое

,начинается с ячейки c3 и Табл2 с записями
Фамилия Пол Диагноз Отделение
Вишников муж Хронический ревматизм Кардиологическое
Кубышев муж Реактивный артрит Кардиологическое
Минин муж Врожденный порок сердца Кардиологическое

начинается с ячейки k3
, я просто в этом деле новичек хочется понять технологию и разобраться.
Спасибо
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
17.03.2010, 07:04 4
вот держи сравнение заголовков на скорую руку. надо еще дописать цикл сравнения строк. просто времени пока нет
Вложения
Тип файла: xls сравнение таблиц.xls (40.0 Кб, 2067 просмотров)
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
17.03.2010, 21:07  [ТС] 5
Спасибо,большое!
Есть вопрос,сравнение идет ток по столбцам,а по ячейкам не канает
и вот еще, если нужно сравнивать таблицы на одном листе,эт осуществимо?
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
18.03.2010, 06:37 6
вот со сравнением всех строк. сразу оговорюсь, способ сравнения не лучший, но годится для тех данных, о которых ты писал, и он весьма простой. возможно этого будет достаточно
Вложения
Тип файла: xls сравнение таблиц.xls (44.5 Кб, 1319 просмотров)
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
19.03.2010, 20:31  [ТС] 7
Добрый вечер,спасибо за помощь,можно еще вопрос?
Как будет выглидеть код если таблицы на одном листе будут, нужно активный лист указывать и адрес ячеек? И вот еще,как работает выподающий список, а то поискал,описание не очень,если не сложно можешь показать? Еще раз большое спасибо
Вложения
Тип файла: xls сравнение таблиц.xls (40.0 Кб, 294 просмотров)
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 07:13 8
1.открываем лист, на котором есть таблицы, ставим курсор в любую свободную ячейку, нажимаем кнопку fx рядом со строкой формул.
2. в открывшемся окошке выбираем "ктегория" = "определенные пользователем"
3. в списке "выберите функцию" выбираем "СравнениеТаблиц".
4. функция имеет два аргумента, первую и вторую таблицу, выделите их.
5. дальше как обычно
Visual Basic
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Function ÑðàâíåíèåÒàáëèö(rng1 As Range, rng2 As Range)
boolResult = True
'öèêë ïåðåáîðà ñòðîê òàáëèöû
For CurrentRow = 1 To rng1.Rows.Count
    'ïðåîáðàçîâòü òåêóùóþ ñòðîêó â ìàññèâ
    arCurRow1 = fRangToArray(rng1.Range(Cells(CurrentRow, 1), Cells(CurrentRow, rng1.Columns.Count)))
    arCurRow2 = fRangToArray(rng2.Range(Cells(CurrentRow, 1), Cells(CurrentRow, rng1.Columns.Count)))
    'óïîðÿäî÷èòü ìàññèâû
    BubbleSort arCurRow1
    BubbleSort arCurRow2
    'ôëàã ðàâåíñòâà òàáëèö
    boolResult = boolResult And fCompareRows(arCurRow1, arCurRow2)
    'äëÿ îòëàäêè, âûâîäèò â Immediate ðàçëè÷àþùèåñÿ ñòðîêè, äëÿ àíàëèçà
    If Not boolResult Then
        For I = 0 To UBound(arCurRow1)
            S1 = S1 & arCurRow1(I) & "  "
            S2 = S2 & arCurRow2(I) & "  "
        Next I
        Debug.Print S1
        Debug.Print S2
        Debug.Print ""
        Exit For
    End If
 
Next CurrentRow
'âûâîä ðåçóëüòàòà
If boolResult Then
    Result = "ðàâíû"
Else
    Result = "íå ðàâíû, ñìîòðè 'Immediate widow'"
End If
ÑðàâíåíèåÒàáëèö = "Òàáëèöû " & Result
End Function
 
Public Function fRangToArray(Rng As Range)
Dim Arr() As String
ReDim Arr(Rng.Columns.Count - 1)
For I = 1 To Rng.Columns.Count
    Arr(I - 1) = Rng.Cells(1, I).Value
Next I
fRangToArray = Arr
End Function
 
Public Function fCompareRows(Arr1, Arr2)
For I = 0 To UBound(Arr1)
    If Not LCase(Arr1(I)) = LCase(Arr2(I)) Then
        fCompareRows = False
        Exit Function
    End If
Next I
fCompareRows = True
End Function
 
'Ïðîöåäóðà äëÿ ñîðòèðîâêè ìàññèâà ìåòîäîì ïóçûðüêà
Sub BubbleSort(ByRef Arr)
    Dim I
    Dim J
    Dim Tmp
 
    For I = 0 To UBound(Arr) Step 1
        For J = 0 To UBound(Arr) - 1 - I Step 1
            If LCase(Arr(J)) > LCase(Arr(J + 1)) Then
                Tmp = Arr(J)
                Arr(J) = Arr(J + 1)
                Arr(J + 1) = Tmp
            End If
        Next J
    Next I
End Sub
Вложения
Тип файла: zip сравнение таблиц.zip (12.9 Кб, 798 просмотров)
2
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
20.03.2010, 07:16 9
не применяй эту функцию, если от надежности результатов зависит: благополучие космического полета, стабильность ядерной реакции, величина твоей зарплаты и(или) т.д.
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
21.03.2010, 12:57  [ТС] 10
Спасибо Excel гуру!
А у тебя что за Excel? и меня такой категории нет
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
21.03.2010, 13:18 11
excel2002
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
21.03.2010, 18:14  [ТС] 12
разобрался))) сделал как надо) можешь по возможности объяснить как ComboBox робит?
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
21.03.2010, 18:33 13
в отдельную тему и подробное описание проблеммы
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
21.03.2010, 20:22  [ТС] 14
Привет а когда сравниваешь строки можно учесть такой момент,что при перемене их местами результат равенства не менялся,столбци ведь так сделаны?

Добавлено через 13 минут
А то как получается,данные,то ведь одинаковые только сортировка разная у таблиц.Как поправить подскажи?Спасибо.
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
21.03.2010, 21:31 15
ну ничесе ты условия меняешь придется делать настоящее сравнение. скопируем таблицы на вспомогательный лист, упорядочим по заглавиям столбцов, потом по строкам, потом будем сравнивать. как то так.
сделать можно, не вопрос...когда время на это найти?
ожидай
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
21.03.2010, 22:31  [ТС] 16
Спасибо,вот я тут поправил чуть твой код, ну чтоб на кнопку жмякать, остается со строкими повозится. Столбци в полне устрайвают, что при их вариотивности результат положительный,и строки бы воть так же...я фаил прикрепил.Спасибо большое
Вложения
Тип файла: xls сравнение таблиц2.xls (42.0 Кб, 157 просмотров)
0
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
22.03.2010, 23:43  [ТС] 17
Привет, очень прошу, скоротай пожалуйста время,код поправить, очень надо,а то на этом сравнении вся мысля и заключалась...,а у меня чет не ладится
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
29.03.2010, 22:12 18
по многочисленным просьбам трудящихся
Visual Basic
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Private Sub btPoluchitj_Click()
Static r1 As Range
Static r2 As Range
Select Case btPoluchitj.Caption
    Case "добавить выделенное как таблицу 1"
        Set r1 = Selection
        btPoluchitj.Caption = "добавить выделенное как таблицу 2"
    Case "добавить выделенное как таблицу 2"
        Set r2 = Selection
        btPoluchitj.Enabled = False
        
        AddDataToSpreadShets r1, r2
        DtSort
End Select
End Sub
 
Private Sub btCompTable_Click()
Dim uRng1 As OWC10.Range
Dim uRng2 As OWC10.Range
Static m As Integer
Static s As String
 
s = IIf(m = 0, "НЕ найдены", s)
m = m + 1
Set uRng1 = Spreadsheet1.ActiveSheet.UsedRange
Set uRng2 = Spreadsheet2.ActiveSheet.UsedRange
If uRng1.Columns.Count = uRng1.Columns.Count And uRng1.Rows.Count = uRng1.Rows.Count Then
    For n = m To uRng1.Cells.Count
        If uRng1.Cells(n) <> uRng2.Cells(n) Then
            uRng1.Cells(n).Select
            uRng2.Cells(n).Select
            s = "найдены"
            MsgBox Chr(9) & "в этих ячейках данные различаются" & Chr(10) & _
            "снова нажмите кнопку 'сравнить таблицы' чтобы продолжить поиск отличий"
            Spreadsheet2.SetFocus
            m = IIf(m = uRng1.Cells.Count, 0, m)
            Exit For
        Else
            m = m + 1
        End If
        If n = uRng1.Cells.Count Then
            m = 0
            MsgBox "сравнение таблиц завершено, отличия " & s
        End If
    Next n
Else
        MsgBox "таблицы разного размера!"
End If
End Sub
 
 
Public Sub AddDataToSpreadShets(Rng1 As Range, Rng2 As Range)
Dim Rng As Range
Dim i As Integer
 
Rng1.Copy
Spreadsheet1.Range("A1").Paste
Spreadsheet1.Columns.AutoFit
 
 
 
Arr = Spreadsheet1.Worksheets(1).UsedRange.Range("A1", Chr(Asc("A") + Spreadsheet1.Worksheets(1).UsedRange.Columns.Count - 1) & 1)
 
For i = 1 To UBound(Arr, 2)
    Set Rng = Rng2.Range("A1", Rng2.Cells(1, Rng2.Columns.Count)).Find(Arr(1, i))
    If Not Rng Is Nothing Then
        CurCol = Rng.Column - Rng2.Column + 1  'поизиция текущего столбца в Rng2
        Rng2.Range(Cells(1, CurCol), Cells(Rng2.Rows.Count, CurCol)).Copy
        Spreadsheet2.Range(Chr(Asc("A") - 1 + i) & 1).Paste
    Else
        Rng2(1, CurCol + 1).Select
        Rng2.Worksheet.Activate
        a = MsgBox(Chr(9) & Chr(9) & "текст заголовка такой:" & Chr(10) & Chr(10) & Selection.Text& _
        , , "такого заголовка нет в таблице2" & "  (столбец " & i & ")")
        Exit Sub
    End If
Next i
UserForm1.Spreadsheet1.Range("A1").Select
UserForm1.Spreadsheet2.Range("A1").Select
End Sub
 
Public Sub DtSort()
Spreadsheet1.ActiveSheet.Range(Chr(Asc("A")) & 2, Chr(Asc("A") + Spreadsheet1.ActiveSheet.UsedRange.Columns.Count) & _
Spreadsheet1.ActiveSheet.UsedRange.Rows.Count).Select
Spreadsheet2.ActiveSheet.Range(Chr(Asc("A")) & 2, Chr(Asc("A") + Spreadsheet2.ActiveSheet.UsedRange.Columns.Count) & _
Spreadsheet2.ActiveSheet.UsedRange.Rows.Count).Select
 
For i = Spreadsheet1.ActiveSheet.UsedRange.Columns.Count To 1 Step -1
    Spreadsheet1.Selection.Sort i
    Spreadsheet2.Selection.Sort i
Next i
UserForm1.Spreadsheet1.Range("A1").Select
UserForm1.Spreadsheet2.Range("A1").Select
Spreadsheet2.Columns.AutoFit
 
End Sub
 
Private Sub UserForm_Click()
 
End Sub
возможно, понадобиться добавить ссылку на "веб компоненты офис ХР" (Tools - References - Browse - C:\Program Files\Common Files\Microsoft Shared\Web Components\10\OWC10.DLL) если у вас в системе вебкомпоненты другой версии, можно поробовать заменить в тексте кода формы "OWC10" на, например, "OWC11". также, возомжно, что вэб компоненты не были установлены при инсталляции Офиса. придется их доустановить.
сделать выбор таблиц при помощи REfEdit у меня не вышло. видимо этот компонент у меня установлен криво. поэтому выбор сделал с помощю кнопки. работает так: выделяете первую таблицу - нажимаете кнопку; выделяете вторую таблицу - нажимаете кнопку.
Вложения
Тип файла: zip сравнение таблиц (version2).zip (19.6 Кб, 203 просмотров)
1
0 / 0 / 0
Регистрация: 29.04.2009
Сообщений: 63
17.04.2010, 16:31  [ТС] 19
Да ну и вариантик ты мне подкинул, спасибо большое,но к сожелению это не подойдет к моей работе, я чуть другую идею приследовал..досадно конечно(((
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
18.04.2010, 13:39 20
если бы ты рассказал, какую цель ты преследуешь, может быть не было бы так досадно.
мне неизвестно, с какой целью сравниваются таблицы, какого они могут быть размера, как часто будет использоваться код(может, просто, сравнить две таблицы и забыть?), сколько в них предполагается отличий, насколько важен результат сравнения. я не видел даже образца данных... мог я после всего этого тебе не угодить?
а чем этот способ не подходит?
1
18.04.2010, 13:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2010, 13:39
Помогаю со студенческими работами здесь

Как сравнить две таблицы и совпадающие элементы перенести в другую таблицу
Помогите пожалуйста! ни как не могу сообразить! Необходимо написать макрос который сравнивает две...

Даны две таблицы Excel
Даны две таблицы Excel. Они находятся не в одном документе, а в двух. Требуется брать каждое...

Сравнить остатки на листе 1 и 2
В задании дано два листа с данными, которые нужно сравнить... Само задание звучит так: &quot;Два листа с...

Сравнить две таблицы и заполнить в третьей таблицы
Привет всем, скажите как из тех 2 таблицы заполнить в третью таблицу.. В первом таблице(ТП) есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru