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

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

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

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста! ни как не могу сообразить! Необходимо написать макрос который сравнивает две таблицы по столбцу и если элементы совподают то копировать всю строку в новую таблицу. Например в первой таблице есть один столбец с фамилиями, а во второй четыре столбца с фамилией, номером человека, номер телефона, документ, и необходимо чтобы в новой таблице перекопировались данные из второй, но только с фамилиеми которые встречаются в первой таблице причем таблицы на разных листах.
Очень надо, помогите пожалуйста!
Заранее спасибо большое!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2013, 13:01
Ответы с готовыми решениями:

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

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

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

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

Скрипт Спасибо заранее!
Вложения
Тип файла: xls Пример.xls (26.0 Кб, 102 просмотров)
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
08.01.2013, 12:41
В коде используется команда 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  [ТС]
Спасибо большое!!! Но у меня еще несколько вопросов если вы не против. Почему то в 3 лист вставляет только первого человека, а не всех кто в списке на 1 листе по заданому столбцу? Можноли задать жестко все диапазоны:от куда брать, где искать и куда вставлять? Если можно то как?

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

Спасибо!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
08.01.2013, 16:26
Serg13, ответьте на вопрос, который в сообщении #7.
0
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 7
09.01.2013, 08:27  [ТС]
Отвечаю на вопрос, который в сообщении #7, не правельно работает. Она со 2 листа берет только первую строку.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
09.01.2013, 08:57
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  [ТС]
Спасибо огромное!!!!!!!!!!
У меня еще был вопрос, Можноли задать диапазон куда вставлять жестко например только сюда? Если можно то как?

Спасибо!
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
10.01.2013, 13:47
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  [ТС]
Скрипт, помоги еще немного. Я пробовал много раз и так и сяк. Не получается, как говорили менял строчку на свою, отрабатывает, но нечего не поевляется т.е. данные не копируются, в чем дело не пойму.
Помоги пожалуйста!
Спасибо Заранее!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2013, 23:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru