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

Как сравнить две таблицы и совпадающие элементы перенести в другую таблицу

06.01.2013, 13:01. Показов 4149. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста! ни как не могу сообразить! Необходимо написать макрос который сравнивает две таблицы по столбцу и если элементы совподают то копировать всю строку в новую таблицу. Например в первой таблице есть один столбец с фамилиями, а во второй четыре столбца с фамилией, номером человека, номер телефона, документ, и необходимо чтобы в новой таблице перекопировались данные из второй, но только с фамилиеми которые встречаются в первой таблице причем таблицы на разных листах.
Очень надо, помогите пожалуйста!
Заранее спасибо большое!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2013, 13:01
Ответы с готовыми решениями:

Как из одной таблицы перенести строку в другую таблицу
Не могу перенести строку из одной таблицы в другую. begin Table1.Open; Table.Open;...

Слейте две линейные таблицы A и B в новую таблицу C, поставив элементы таблицы A на нечетные места, а элементы таблицы B – на четные
Помогите пожалуйста с решением. Слейте две линейные таблицы A и B в новую таблицу C, поставив...

Из одной таблицы БД(foxpro) перенести в другую таблицу БД(mssql).
Нужно несколько столбцов из одной таблицы базы данных(foxpro) перенести в другую таблицу бд...

Сравнить две таблицы и вывести значение в отдельную таблицу
Доброго дня. Возникла задача сравнивать две таблицы каждая по 3 столбца(от 30-50 строк) с...

13
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
06.01.2013, 15:12 2
Зачем макрос? Протяните 3 ВПР()
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
08.01.2013, 07:24 3
Serg13, выкладывайте книги с примерными данными и поясняйте, что нужно сделать.
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
08.01.2013, 09:41  [ТС] 4
В файле "Пример" на первом листе данные о ФИО их необходимо сравнить с ФИО на листе 2, и если есть совпадения, то скопировать все данные: ФИО,Должность,Классность,Документ на лист 3 в соответствующие поля. Таких шапок может быть до 10 поэтому необходимо выбрать диапазон.

Скрипт Спасибо заранее!
Вложения
Тип файла: xls Пример.xls (26.0 Кб, 99 просмотров)
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
08.01.2013, 12:41 5
В коде используется команда Find, которая ищет не больше 255 симолов (если будет больше, то ошибка возникнет и код остановится).
Чтобы код работал быстрее, во время работы кода можно отключить, а после выполнения работы кода включить: 1) обновление монитора, 2) запуск событий, 3) пересчёт формул.

Кликните здесь для просмотра всего текста
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
101
Sub Procedure_1()
    
    'Здесь указываем номер строки первого листа, с
    'которой начинаются данные.
    Const myStart As Long = 3
    
    Dim myRange As Excel.Range
    Dim myColumn As Long
    Dim mySheet_2End As Long, mySheet_3End As Long
    Dim mySearchRange As Excel.Range
    Dim myFind As Excel.Range, myAddress As String
    Dim i As Long
    
    Dim shSheet_1 As Excel.Worksheet
    Dim shSheet_2 As Excel.Worksheet
    Dim shSheet_3 As Excel.Worksheet
    
    '1. Даём имена листам. Через эти имена будем обращаться к листам.
    'Так удобнее писать код.
    Set shSheet_1 = Worksheets(1)
    Set shSheet_2 = Worksheets(2)
    Set shSheet_3 = Worksheets(3)
    
    '2. Пользователь выбирает столбец с данными на первом листе.
    'Не путайте "InputBox" программы Excel и "InputBox" языка программирования VBA.
    'Type:=8 - означает, что будет взяты не данные из ячейки, а сама ячейка.
    'Если поставить курсор на слово "InputBox" и нажать клавишу "F1",
    'то появится справка и можно подробнее посмотреть параметры команды "InputBox".
    Set myRange = _
        Application.InputBox(Prompt:="Выберите одну ячейку в нужном столбце", Type:=8)
    
    '3. Берём номер столбца, который выбрал пользователь.
    myColumn = myRange.Column
    
    '4. Задаём диапазон, в котором будем искать на втором листе.
    '4.1. Определяем последнюю строку с даннными на втором листе.
    mySheet_2End = shSheet_2.Cells(shSheet_2.Rows.Count, "B").End(xlUp).Row
    '4.2. Задаём диапазон.
    Set mySearchRange = shSheet_2.Range("B2:B" & mySheet_2End)
    
    '5. Определяем, куда вставлять данные на третьем листе.
    'Т.к. я не знаю, по какому столбцу определить окончание данных,
    'то определю последнюю строку в отношении всего листа.
    'What:="?" - знак вопроса в этом случае - это специальный символ.
    'SearchDirection:=xlPrevious - поиск с конца в начало.
    '"+1", т.к. данные нужно вставлять в пустую строку.
    mySheet_3End = shSheet_3.Cells.Find(What:="?", LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row + 1
 
    '6. Выполнение задания.
    'Двигаемся по первому листу по выбранному столбцу до последней строки с данными.
    'shSheet_1.Cells(shSheet_1.Rows.Count, myRange.Column).End(xlUp) - это
        'аналогично, если сделать на листе активной ячейку в последней строке
        'и нажать сочетание клавиш "Ctrl + стрелка вверх".
    'shSheet_1.Rows.Count - это количество строк на листе.
    'shSheet_1.Cells(shSheet_1.Rows.Count, myRange.Column).End(xlUp).Row - это
        'номер строки, где заканчиваются данные в выбранном столбце.
    For i = myStart To shSheet_1.Cells(shSheet_1.Rows.Count, myColumn).End(xlUp).Row Step 1
    
        'Ищем данные из текущей ячейки первого листа на втором листе.
        'В параметре "What" должен быть текст, поэтому нужно преобразовать
        'данные из ячейки в текст с помощью CStr на случай, если в ячейке
        'содержится не текст, а что-то другое. Иначе будет ошибка и код остановит работу.
        'After:=mySearchRange.Cells(mySearchRange.Cells.Count, 1) - поиск ведётся
            'после указанной ячейки, поэтому поиск нужно вести с конца диапазона,
            'чтобы собирать данные в нужном порядке.
        Set myFind = mySearchRange.Find(What:=CStr(shSheet_1.Cells(i, myColumn).Value), _
            After:=mySearchRange.Cells(mySearchRange.Cells.Count, 1), LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
    
        'Смотрим, есть ли результат поиска.
        If Not myFind Is Nothing Then
            
            'Запоминаем адрес первой найденной ячейки,
            'чтобы потом остановить поиск.
            myAddress = myFind.Address
            
            Do
            
                'Переносим данные со второго на третий лист.
                shSheet_3.Range("B" & mySheet_3End & ":E" & mySheet_3End).Value = _
                    shSheet_2.Range("B" & myFind.Column & ":E" & myFind.Column).Value
                
                'Переход к следующей строке на третьем листе.
                mySheet_3End = mySheet_3End + 1
                
                'Следующий поиск тех же самых данных.
                Set myFind = mySearchRange.FindNext(myFind)
                
            Loop While myFind.Address <> myAddress
            
        End If
        
    Next i
    
    'Сообщение, что работа кода завершена.
    MsgBox "Работа кода завершена.", vbInformation
    
End Sub
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
08.01.2013, 14:17  [ТС] 6
Спасибо большое!!! Но у меня еще несколько вопросов если вы не против. Почему то в 3 лист вставляет только первого человека, а не всех кто в списке на 1 листе по заданому столбцу? Можноли задать жестко все диапазоны:от куда брать, где искать и куда вставлять? Если можно то как?

Спасибо!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
08.01.2013, 14:28 7
Serg13, в выложенной книге код из сообщения #5 правильно работает?
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
08.01.2013, 15:17  [ТС] 8
Извените но я проверяю почемуто только иванов у меня, попытаюсь разобраться.
Можноли задать жестко все диапазоны:от куда брать, где искать и куда вставлять? Если можно то как?

Спасибо!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
08.01.2013, 16:26 9
Serg13, ответьте на вопрос, который в сообщении #7.
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
09.01.2013, 08:27  [ТС] 10
Отвечаю на вопрос, который в сообщении #7, не правельно работает. Она со 2 листа берет только первую строку.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
09.01.2013, 08:57 11
Serg13, да ошибка была в коде, из сообщения #5 в коде строки 83 - 84 нужно сделать эти строки:
Visual Basic
1
2
3
                'Переносим данные со второго на третий лист.
                shSheet_3.Range("B" & mySheet_3End & ":E" & mySheet_3End).Value = _
                    shSheet_2.Range("B" & myFind.Row & ":E" & myFind.Row).Value
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
10.01.2013, 13:37  [ТС] 12
Спасибо огромное!!!!!!!!!!
У меня еще был вопрос, Можноли задать диапазон куда вставлять жестко например только сюда? Если можно то как?

Спасибо!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
10.01.2013, 13:47 13
Serg13, в сообщении #11
Visual Basic
1
shSheet_3.Range("B" & mySheet_3End & ":E" & mySheet_3End).Value =
это место, куда вставляем.

Укажите здесь свои данные.
1
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
22.01.2013, 23:12  [ТС] 14
Скрипт, помоги еще немного. Я пробовал много раз и так и сяк. Не получается, как говорили менял строчку на свою, отрабатывает, но нечего не поевляется т.е. данные не копируются, в чем дело не пойму.
Помоги пожалуйста!
Спасибо Заранее!
0
22.01.2013, 23:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2013, 23:12
Помогаю со студенческими работами здесь

Скопировать данные таблицы и перенести их в другую вновь созданную таблицу этой же БД
Программисты добрые, помогите! Есть бд, форма отображения- с шарп. Необходимо скопировать данные...

Сформировать новую таблицу, удалив из исходной таблицы элементы, имеющие совпадающие значения
2. Дана таблица А из 10 элементов. Сформировать новую таблицу, удалив из таблицы А элементы,...

Сформировать новую таблицу, удалив из заданной таблицы элементы, имеющие совпадающие значения
Дана таблица А из 10 элементов. Сформировать новую таблицу, удалив из таблицы А элементы, имеющие...

Как перенести две строки из справочника в другую чистую конфигурацию?
Надо из учебной, частично заполненной базы УФ, перенести пару строк из справочника номенклатуры в...


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

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