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

Удаление совпадающих записей в двух столбцах

08.02.2013, 11:26. Показов 1766. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В excel необходимо сравнить два столбца и удалить совпадающие записи.
Пример:
1 2
2 1
1
1
1
1
2
3
3
В итоге должно в первом столбце остаться две тройки, а второй столбец мы не трогаем. Как это сделать?
Спасибо.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2013, 11:26
Ответы с готовыми решениями:

Поиск и удаление совпадающих строк
В общем случай такой: Dim a& With Worksheets(2) For a = 1 To 26000 If .Cells(a, 1).Value = "" And .Cells(a, 2).Value =...

Поиск совпадающих значений из двух таблиц
Здравствуйте форумчане :) У меня стоит задача: есть два файла excel, где имеются данные о людей: фио, день рождения, образование и т.д. ...

Сравнение двух столбцов с выведением списка совпадающих фамилий
Нужно сравнить стоб А со стобом С и вывести список фамилий которые совпадают в столб В. Прошу помощи как это можно сделать

6
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
08.02.2013, 11:46
Ничего не понял - по какой логике должно в первом столбце остаться две тройки?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.02.2013, 13:46
Мне например логика понятна. Во втором столбце троек нет.
Но непонятно что значит "удалить" - очистить эти ячейки? удалить со сдвигом вверх (самое долгое...)? может отобрать оставшиеся значения в другой столбец?

Добавлено через 55 минут
Да, и неплохо бы уточнить - сколько строк нужно анализировать?
Что нужно - формулы или макрос? Можно ли столбцы сортировать? Приемлимо ли ручное удаление значений (например после того, как фомулами выявили нужные значения, отсортировали из в кучку)?

Потому что сейчас ответ может быть и такой - посмотрите какие номера присутствуют во втором столбце, выделите эти ячейки мышью и нажмите DEL
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
08.02.2013, 13:46
Цитата Сообщение от Hugo121 Посмотреть сообщение
удалить со сдвигом вверх (самое долгое...)?
- я бы загрузил содержимое обоих столбцов в массивы, а потом из первого массива удалил элементы, входящие во второй. Затем очистил бы первый столбец (это быстро) и вытряхнул бы в него оставшиеся в первом массиве элементы.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.02.2013, 13:54
Я бы вытряхнул, не очищая
Но останутся дыры - но может дыры и нужны? Нам неведомо...
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
08.02.2013, 13:54
Код работает на активном Excel-листе со столбцами "A" и "B".
Для работы кода нужно в программе "VBA" подключить библиотеку: Tools - References... - Microsoft Scripting Runtime.
Кликните здесь для просмотра всего текста
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
Sub Procedure_1()
    
    'Tools - References... Microsoft Scripting Runtime.
    Dim myDictionary As New Scripting.Dictionary
    
    Dim myArray_1() As Variant, myArray_2() As Variant
    Dim myLastRow As Variant
    Dim i As Long, j As Long
    
    '1. Определяем последнюю строку с данными в столбце "B".
        'Чтобы знать: со скольки строками работать.
    myLastRow = Columns("B").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row
        
    '2. Быстрее работать с VBA-массивами, чем с Excel-ячейками.
        'Поэтому помещаем данные из Excel-листа в VBA-массив.
    myArray_1() = Range("B1:B" & myLastRow).Value
    
    '3. Для поиска одинаковых данных удобно и быстрее использовать
        'объект "Dictionary".
    'Помещам данные из массива "myArray_1" в объект "myDictionary".
    For i = 1 To UBound(myArray_1, 1) Step 1
        'Добавляем только уникальные данные.
        If myDictionary.Exists(Key:=myArray_1(i, 1)) = False Then
            'Item в данном случае не нужно, но этот параметр
            'обязательно нужно указать. Помещаем туда ноль.
            myDictionary.Add Key:=myArray_1(i, 1), Item:=0
        End If
    Next i
    
    'Берём с Excel-листа данные из столбца "A".
    
    '4. Определяем последнюю строку с данными в столбце "A".
    myLastRow = Columns("A").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
        MatchCase:=False, SearchFormat:=False).Row
        
    '5. Помещаем данные из Excel-листа в VBA-массив.
    myArray_1() = Range("A1:A" & myLastRow).Value
    
    '6. Удаляю данные из массива "myArray_1" из элементов, 
        'которые есть в объекте "myDictionary".
    For i = 1 To UBound(myArray_1, 1) Step 1
        'Смотрю, есть ли элемент из массива "myArray_1"
            'в объекте "myDictionary".
        If myDictionary.Exists(Key:=myArray_1(i, 1)) = True Then
            'Если есть, то удаляю данные из элемента массива "myArray_1".
            myArray_1(i, 1) = Empty
        End If
    Next i
    
    '7. Переношу данные из массива "myArray_1" в массив "myArray_2",
        'чтобы потом сразу вставить данные на Excel-лист. Так
        'должно быстрее сработать.
    ReDim myArray_2(1 To UBound(myArray_1, 1), 1 To 1)
    
    For i = 1 To UBound(myArray_1, 1) Step 1
        'Если в элементе массива не пусто, то помещаю данные
            'в массив "myArray_2".
        If myArray_1(i, 1) <> Empty Then
            'С помощью переменной "j" переходим по массиву "myArray_2".
            j = j + 1
            myArray_2(j, 1) = myArray_1(i, 1)
        End If
    Next i
    
    '8. Вставляем данные в столбец "A".
    Range("A1:A" & myLastRow).Value = myArray_2()
    
End Sub
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
08.02.2013, 14:51
Такой вариант:
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
Sub tt()
    Dim a(), i&, ii&, t
 
    'данные в массив
    a = [a1].CurrentRegion.Value
    'создаём словарь
    With CreateObject("Scripting.Dictionary")
        'цикл, данные второго столбца в словарь (значения, пустые пропускаем)
        For i = 1 To UBound(a)
            If Len(a(i, 2)) Then .Item(a(i, 2)) = 0&
        Next
 
        'перебор первого столбца массива
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Len(t) Then
                'если нет в словаре - перекладываем наверх
                If Not .exists(t) Then
                    a(i, 1) = Empty
                    ii = ii + 1
                    a(ii, 1) = t
                Else
                    'если есть - просто стираем
                    a(i, 1) = Empty
                End If
            End If
        Next
 
    End With
 
    'выгружаем назад изменённый первый столбец
    [a1].CurrentRegion.Columns(1).Value = a
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2013, 14:51
Помогаю со студенческими работами здесь

Поиск в двух столбцах
Добрый день. Задача такая: есть столбец А с номерами (условно) машин на странице Sheet1. Есть столбец B с такими же данными на странице...

Проверка совпадений в двух столбцах
Sub Poisk() For a = 1 To 5 i = Cells(1, 5) m = Cells(a, 1) If i = m Then Cells(a, 2).Select Selection.Copy Cells(1, 6).Select...

Сравнение значений в двух столбцах
Доброго времени суток! Помогите пожалуйста написать макрос для такой задачи: * следует проанализировать диапазоны значений в двух...

Удаление строки, если она пуста во всех столбцах
Помогите пожалуйта написать макрос на удаление строки, если эта строка будет пуста во всех столбца, а если хоть в одном столбце(из первой...

Поиск одинаковых чисел в двух столбцах
Excel Доброго времени суток, форумчане! Извините что напрягаю, но вот в чем загвоздка: Необходимо найти одинаковые значения в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru