Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2013, 10:15   #1
TypucT
 
Регистрация: 19.09.2013
Сообщений: 3
По умолчанию Сравнение 2х столбцов, с копипастой ВСЕХ совпавших строк второго столбца на другой лист

Добрый день. Искал такой код в поисковике - не нашел.
Нужно сравнить два столбца.
в первом уникальные не повторяющиеся коды,
во втором повторяются несколько раз. в третьем разные значения
пример
А В С
один один 111
два один 222
три три 333
четыре четыре 444
пять три 555

нужно сравнить значения в столбцах А В
и скопировать на другой лист все совпадающие строки
пример результата:
А В С
один один 111
один 222
три три 333
три 555
четыре четыре 444
Вложения
Тип файла: pdf вопрос на форуме.pdf (85.2 Кб, 10 просмотров)

Последний раз редактировалось TypucT; 21.11.2013 в 10:26.
TypucT вне форума Ответить с цитированием
Старый 21.11.2013, 12:11   #2
TypucT
 
Регистрация: 19.09.2013
Сообщений: 3
По умолчанию

Есть макрос который просто ищет совпадения и ставит их напротив (типа ВПР)
можно ли его переделать?
Dim a(), b(), c(), t&, x As Byte, iLastrow As Long, i As Long

With Sheets(1)
iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
a = Range(.[A1], .Range("A" & iLastrow)).Value
iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row
b = Range(.[D1], .Range("B" & iLastrow)).Value

ReDim c(1 To UBound(a), 1 To 3)

With CreateObject("Scripting.Dictionary" )

For i = 1 To UBound(a)
.Item(a(i, 1)) = i
Next

For i = 1 To UBound(b)
If .exists(b(i, 1)) Then
t = .Item(b(i, 1))
For x = 1 To 3: c(t, x) = b(i, x): Next
End If
Next
End With

.[F1].Resize(UBound(c), 3) = c
.Activate
End With

End Sub
TypucT вне форума Ответить с цитированием
Старый 21.11.2013, 13:28   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Так:?

Код:
Sub ArrCopy()
Dim a(), t&,  lsRow&, i&

    With Sheets("Лист1")
    
        With .UsedRange
            lsRow = .Row + .Rows.Count - 1
        End With
        
        a = Range("A1:C" & lsRow).Value
        
            With CreateObject("Scripting.Dictionary")
            
                For i = 1 To UBound(a): .Item(a(i, 1)) = i: Next
                
                For i = 1 To UBound(a)
                    If .exists(a(i, 2)) Then
                        t = t + 1
                        a(t, 1) = a(i, 2)
                        a(t, 2) = a(i, 3)
                    End If
                Next
                
            End With
            
    End With
    
    If t Then
        With Sheets("Лист2")
        
            With .UsedRange
                lsRow = .Row + .Rows.Count - 1
            End With
            
            .Range("A1:C" & lsRow).ClearContents
            .Range("A1").Resize(t, 2) = a
            
        End With
    End If
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 21.11.2013, 14:42   #4
TypucT
 
Регистрация: 19.09.2013
Сообщений: 3
По умолчанию

Спасибо, этого достаточно. Вы мне очень помогли.
TypucT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение столбцов excel с последующим добавлением записей из второго списка Николя Microsoft Office Excel 13 01.03.2013 10:36
Сравнение данных по определенному диапазону строк и при совпадении значений копирование данных в другой лист Volk358 Microsoft Office Excel 6 02.10.2012 09:54
Перенос на другой лист по значению столбца ElenaNTro Microsoft Office Excel 5 17.03.2011 14:50
Сравнение 2 столбцов и удаление повторяющегося из второго столбца ildusfm Microsoft Office Excel 3 07.05.2009 09:09
Матрица A состоит из 8 строк и 6 столбцов. вычесть из всех её строк, начиная со второй, первую строку Dimak24 Помощь студентам 1 19.12.2008 15:45